grep 'potato:' file.txt | sed 's/^.*: //'
grep
szuka dowolnego wiersza zawierającego ciąg potato:
, a następnie dla każdego z tych wierszy sed
zastępuje ( s///
- podstawia) dowolny znak ( .*
) od początku wiersza ( ^
) do ostatniego wystąpienia ciągu :
(dwukropek, po którym następuje spacja) pustym string ( s/...//
- zastąp pierwszą część drugą częścią, która jest pusta).
lub
grep 'potato:' file.txt | cut -d\ -f2
Dla każdej linii, która zawiera potato:
, cut
podzieli linię na wiele pól oddzielonych spacją ( -d\
- d
= separator, \
= znak spacji ze znakiem ucieczki, coś podobnego -d" "
też by zadziałało) i wypisze drugie pole każdej takiej linii ( -f2
).
lub
grep 'potato:' file.txt | awk '{print $2}'
Dla każdego wiersza, który zawiera potato:
, awk
wypisze drugie pole ( print $2
), które jest domyślnie rozdzielone spacjami.
lub
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Wszystkie wiersze, które zawierają, potato:
są wysyłane do skryptu Perl inline ( -e
), który pobiera wszystkie wiersze z , a następnie dla każdego z tych wierszy dokonuje takiego samego podstawienia jak w pierwszym przykładzie powyżej, a następnie drukuje go.stdin
lub
awk '{if(/potato:/) print $2}' < file.txt
Plik jest wysyłany przez stdin
( < file.txt
wysyła zawartość pliku przez stdin
polecenie po lewej stronie) do awk
skryptu, który dla każdego wiersza zawierającego potato:
( if(/potato:/)
zwraca wartość true, jeśli wyrażenie regularne /potato:/
pasuje do bieżącego wiersza), wypisuje drugie pole, zgodnie z opisem powyżej.
lub
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
Plik jest wysyłany za pośrednictwem stdin
( < file.txt
patrz wyżej) do skryptu Perl, który działa podobnie do powyższego, ale tym razem upewnia się również, że każda linia zawiera ciąg potato:
( /potato:/
jest to wyrażenie regularne, które pasuje, jeśli bieżąca linia zawiera potato:
, robi ( &&
), a następnie przechodzi do zastosowania wyrażenia regularnego opisanego powyżej i wyświetla wynik).
awk '$1 ~ /potato/ { print $2 }' file.txt
.