Récupère la dernière partie de la chaîne après le trait d'union

10

Existe-t-il une ligne de commande simple pour extraire la dernière partie d'une chaîne séparée par des tirets? Par exemple, je veux extraire 123de foo-bar-123.

Steven
la source

Réponses:

23

Vous pouvez utiliser l' expansion des paramètres de Bash :

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

Si vous souhaitez utiliser un autre processus, avec Awk:

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

Ou, si vous préférez Sed:

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

Un processus externe plus léger, comme le suggère Glenn Jackman, est cut:

cut -d- -f3 <<< "$string"
jasonwryan
la source
l'expansion des paramètres du shell est la meilleure réponse. Un outil externe léger est cut:cut -d- -f3 <<< "$string"
glenn jackman
1
@glennjackman - re: cut; en effet mais seulement si le numéro du dernier champ est connu (car la question est un peu ambiguë: existe-t-il une simple ligne de commande pour extraire la dernière partie ...? )
don_crissti
2
@don_crissti, en effet. On pourrait le faire rev <<< "$string" | cut -d- -f1 | rev, mais alors nous nous éloignons de la simplicité de l'extension param.
glenn jackman
3
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
JJoao
la source
1
echo "foo-bar-123"| awk -F"-" '{print $3}' 
rcjohnson
la source