sed -n 's/^potato:[[:space:]]*//p' file.txt
Uno puede pensar en Grep como un Sed restringido, o en Sed como un Grep generalizado. En este caso, Sed es una herramienta buena y liviana que hace lo que usted quiere, aunque, por supuesto, también existen otras formas razonables de hacerlo.
grep -Po 'potato:\s\K.*' file
-P para usar la expresión regular de Perl
-o para generar solo la coincidencia
\s para que coincida con el espacio después de potato:
\K para omitir la coincidencia
.* para que coincida con el resto de la(s) cadena(s)
O use aserciones de expresiones regulares:grep -oP '(?<=potato: ).*' file.txt
grep 'potato:' file.txt | sed 's/^.*: //'
grep busca cualquier línea que contenga la cadena potato: , luego, para cada una de estas líneas, sed reemplaza (s/// - sustituir) cualquier carácter (.* ) desde el principio de la línea (^ ) hasta la última ocurrencia de la secuencia : (dos puntos seguidos de un espacio) con la cadena vacía (s/...// - sustituir la primera parte por la segunda parte, que está vacía).
o
grep 'potato:' file.txt | cut -d\ -f2
Por cada línea que contiene potato: , cut dividirá la línea en múltiples campos delimitados por espacios (-d\ - d =delimitador, \ =carácter de espacio escapado, algo así como -d" " también hubiera funcionado) e imprima el segundo campo de cada línea (-f2 ).
o
grep 'potato:' file.txt | awk '{print $2}'
Por cada línea que contiene potato: , awk imprimirá el segundo campo (print $2 ) que está delimitado por defecto por espacios.
o
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Todas las líneas que contienen potato: se envían a una línea (-e ) Script Perl que toma todas las líneas desde stdin , luego, para cada una de estas líneas, hace la misma sustitución que en el primer ejemplo anterior, luego lo imprime.
o
awk '{if(/potato:/) print $2}' < file.txt
El archivo se envía a través de stdin (< file.txt envía el contenido del archivo a través de stdin al comando de la izquierda) a un awk script que, por cada línea que contiene potato: (if(/potato:/) devuelve verdadero si la expresión regular /potato:/ coincide con la línea actual), imprime el segundo campo, como se describe arriba.
o
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
El archivo se envía a través de stdin (< file.txt , ver arriba) a un script de Perl que funciona de manera similar al anterior, pero esta vez también se asegura de que cada línea contenga la cadena potato: (/potato:/ es una expresión regular que coincide si la línea actual contiene potato: y, si lo hace (&& ), luego procede a aplicar la expresión regular descrita anteriormente e imprime el resultado).