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).