GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo buscar contenido después del patrón?

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


Linux
  1. ¿Cómo recuperar datos Xfs después de Rm?

  2. Linux:¿cómo saber qué hacer con Grep en Dmesg?

  3. Grep ¿Cómo suprimir la visualización de archivos no coincidentes?

  4. Cómo grep con salida de color

  5. ¿Cómo verificar si un archivo está vacío en Bash?

Cómo usar CherryTree para tomar notas

Cómo buscar múltiples cadenas, patrones o palabras

Cómo encontrar una cadena en un archivo en Linux

Cómo redirigir la salida del comando de shell

grep pares de patrones y archivo

¿Cómo veo du en GB en lugar de MB en Linux?