sed -n 's/^potato:[[:space:]]*//p' file.txt
On peut considérer Grep comme un Sed restreint, ou Sed comme un Grep généralisé. Dans ce cas, Sed est un bon outil léger qui fait ce que vous voulez, bien qu'il existe bien sûr plusieurs autres façons raisonnables de le faire.
grep -Po 'potato:\s\K.*' file
-P
utiliser l'expression régulière Perl
-o
pour n'afficher que la correspondance
\s
pour faire correspondre l'espace après potato:
\K
pour omettre la correspondance
.*
pour faire correspondre le reste de la ou des chaînes
Ou utilisez des assertions regex :grep -oP '(?<=potato: ).*' file.txt
grep 'potato:' file.txt | sed 's/^.*: //'
grep
recherche toute ligne contenant la chaîne potato:
, puis, pour chacune de ces lignes, sed
remplace (s///
- remplacer) n'importe quel caractère (.*
) depuis le début de la ligne (^
) jusqu'à la dernière occurrence de la séquence :
(deux-points suivi d'un espace) avec la chaîne vide (s/...//
- remplacer la première partie par la deuxième partie, qui est vide).
ou
grep 'potato:' file.txt | cut -d\ -f2
Pour chaque ligne contenant potato:
, cut
divisera la ligne en plusieurs champs délimités par un espace (-d\
- d
=délimiteur, \
=caractère espace échappé, quelque chose comme -d" "
aurait également fonctionné) et imprimez le deuxième champ de chacune de ces lignes (-f2
).
ou
grep 'potato:' file.txt | awk '{print $2}'
Pour chaque ligne contenant potato:
, awk
imprimera le deuxième champ (print $2
) qui est délimité par défaut par des espaces.
ou
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Toutes les lignes contenant potato:
sont envoyés à un inline (-e
) Script Perl qui prend toutes les lignes de stdin
, puis, pour chacune de ces lignes, fait la même substitution que dans le premier exemple ci-dessus, puis l'imprime.
ou
awk '{if(/potato:/) print $2}' < file.txt
Le fichier est envoyé via stdin
(< file.txt
envoie le contenu du fichier via stdin
à la commande de gauche) à un awk
script qui, pour chaque ligne contenant potato:
(if(/potato:/)
renvoie vrai si l'expression régulière /potato:/
correspond à la ligne actuelle), imprime le deuxième champ, comme décrit ci-dessus.
ou
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
Le fichier est envoyé via stdin
(< file.txt
, voir ci-dessus) à un script Perl qui fonctionne de manière similaire à celui ci-dessus, mais cette fois, il s'assure également que chaque ligne contient la chaîne potato:
(/potato:/
est une expression régulière qui correspond si la ligne courante contient potato:
, et, si c'est le cas (&&
), puis procède à l'application de l'expression régulière décrite ci-dessus et imprime le résultat).