Obter a última parte da sequência após hífen

10

Existe uma linha de comando simples para extrair a última parte de uma sequência separada por hífens? Por exemplo, eu quero extrair 123de foo-bar-123.

Steven
fonte

Respostas:

23

Você pode usar a expansão de parâmetros do Bash :

string="foo-bar-123" && printf "%s\n" "${string##*-}"
123

Se você deseja usar outro processo, com o Awk:

echo "foo-bar-123" | awk -F- '{print $NF}'

Ou, se você preferir Sed:

echo "foo-bar-123" | sed 's/.*-//'

Um processo externo mais leve, como sugere Glenn Jackman, é cut:

cut -d- -f3 <<< "$string"
jasonwryan
fonte
A expansão dos parâmetros do shell é a melhor resposta. Uma ferramenta externa leve é cut:cut -d- -f3 <<< "$string"
glenn jackman 31/03
11
@glennjackman - re: cut; na verdade, mas apenas se o número do último campo é conhecido (como a questão é um pouco ambígua: ? Existe uma linha de comando simples para extrair a última parte ... )
don_crissti
2
@don_crissti, de fato. Um poderia fazer rev <<< "$string" | cut -d- -f1 | rev, mas então estamos desviar-nos a simplicidade de param.expansion.
Glenn Jackman
3
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
JJoao
fonte
1
echo "foo-bar-123"| awk -F"-" '{print $3}' 
rcjohnson
fonte