sed -n 's/^potato:[[:space:]]*//p' file.txt
Si può pensare a Grep come a un Sed ristretto, oa Sed come a un Grep generalizzato. In questo caso, Sed è uno strumento buono e leggero che fa quello che vuoi, anche se, ovviamente, esistono anche molti altri modi ragionevoli per farlo.
grep -Po 'potato:\s\K.*' file
-P per usare l'espressione regolare Perl
-o per produrre solo la corrispondenza
\s per abbinare lo spazio dopo potato:
\K per omettere la corrispondenza
.* in modo che corrisponda al resto delle stringhe
Oppure usa le asserzioni regex:grep -oP '(?<=potato: ).*' file.txt
grep 'potato:' file.txt | sed 's/^.*: //'
grep cerca qualsiasi riga che contenga la stringa potato: , quindi, per ognuna di queste righe, sed sostituisce (s/// - sostituire) qualsiasi carattere (.* ) dall'inizio della riga (^ ) fino all'ultima occorrenza della sequenza : (due punti seguiti da spazio) con la stringa vuota (s/...// - sostituire la prima parte con la seconda parte, che è vuota).
o
grep 'potato:' file.txt | cut -d\ -f2
Per ogni riga che contiene potato: , cut dividerà la riga in più campi delimitati da spazio (-d\ - d =delimitatore, \ =carattere spazio con escape, qualcosa come -d" " avrebbe anche funzionato) e stampa il secondo campo di ciascuna di queste righe (-f2 ).
o
grep 'potato:' file.txt | awk '{print $2}'
Per ogni riga che contiene potato: , awk stamperà il secondo campo (print $2 ) che è delimitato per impostazione predefinita da spazi.
o
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Tutte le righe che contengono potato: vengono inviati a un file in linea (-e ) Script Perl che prende tutte le righe da stdin , quindi, per ciascuna di queste righe, esegue la stessa sostituzione del primo esempio precedente, quindi la stampa.
o
awk '{if(/potato:/) print $2}' < file.txt
Il file viene inviato tramite stdin (< file.txt invia il contenuto del file tramite stdin al comando a sinistra) a un awk script che, per ogni riga che contiene potato: (if(/potato:/) restituisce true se l'espressione regolare /potato:/ corrisponde alla riga corrente), stampa il secondo campo, come descritto sopra.
o
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
Il file viene inviato tramite stdin (< file.txt , vedi sopra) a uno script Perl che funziona in modo simile a quello precedente, ma questa volta si assicura anche che ogni riga contenga la stringa potato: (/potato:/ è un'espressione regolare che corrisponde se la riga corrente contiene potato: , e, se lo fa (&& ), quindi applica l'espressione regolare descritta sopra e stampa il risultato).