sed -n 's/^potato:[[:space:]]*//p' file.txt
O Grepovi lze uvažovat jako o omezeném Sedovi nebo o Sedovi jako o zobecněném Grepovi. V tomto případě je Sed dobrý a lehký nástroj, který dělá to, co chcete – i když samozřejmě existuje několik dalších rozumných způsobů, jak to udělat.
grep -Po 'potato:\s\K.*' file
-P
použít regulární výraz Perl
-o
na výstup pouze shoda
\s
aby odpovídala mezerě za potato:
\K
vynechat zápas
.*
aby odpovídal zbytku řetězce (řetězců)
Nebo použijte výrazy regulárního výrazu:grep -oP '(?<=potato: ).*' file.txt
grep 'potato:' file.txt | sed 's/^.*: //'
grep
hledá jakýkoli řádek, který obsahuje řetězec potato:
, pak pro každý z těchto řádků sed
nahradí (s///
- nahradit) libovolný znak (.*
) od začátku řádku (^
) až do posledního výskytu sekvence :
(dvojtečka následovaná mezerou) s prázdným řetězcem (s/...//
- nahraďte první část druhou částí, která je prázdná).
nebo
grep 'potato:' file.txt | cut -d\ -f2
Pro každý řádek, který obsahuje potato:
, cut
rozdělí řádek do více polí oddělených mezerou (-d\
- d
=oddělovač, \
=znak mezery, něco jako -d" "
by také fungovalo) a vytiskněte druhé pole každého takového řádku (-f2
).
nebo
grep 'potato:' file.txt | awk '{print $2}'
Pro každý řádek, který obsahuje potato:
, awk
vytiskne druhé pole (print $2
), která je ve výchozím nastavení oddělena mezerami.
nebo
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Všechny řádky, které obsahují potato:
jsou odesílány na řádek (-e
) Perl skript, který přebírá všechny řádky z stdin
, pak pro každý z těchto řádků provede stejnou substituci jako v prvním příkladu výše a poté ji vypíše.
nebo
awk '{if(/potato:/) print $2}' < file.txt
Soubor je odeslán prostřednictvím stdin
(< file.txt
odešle obsah souboru pomocí stdin
na příkaz vlevo) na awk
skript, který pro každý řádek obsahující potato:
(if(/potato:/)
vrátí hodnotu true, pokud je regulární výraz /potato:/
odpovídá aktuálnímu řádku), vytiskne druhé pole, jak je popsáno výše.
nebo
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
Soubor je odeslán prostřednictvím stdin
(< file.txt
, viz výše) na skript v Perlu, který funguje podobně jako výše uvedený, ale tentokrát také zajišťuje, že každý řádek obsahuje řetězec potato:
(/potato:/
je regulární výraz, který odpovídá, pokud aktuální řádek obsahuje potato:
, a pokud ano (&&
), poté pokračuje v aplikaci regulárního výrazu popsaného výše a vytiskne výsledek).