varios usar test solo siguientes regulares regresará que patrones líneas los expresiones egrep cuál con comiencen comandos comando buscar archivo linux grep

linux - usar - grep para contenido DESPUÉS del patrón



usar grep (5)

Esto imprimirá todo después de cada partida, solo en la misma línea:

perl -lne ''print $1 if /^potato:/s*(.*)/'' file.txt

Esto hará lo mismo, excepto que también imprimirá todas las líneas siguientes:

perl -lne ''if ($found){print} elsif (/^potato:/s*(.*)/){print $1; $found++}'' file.txt

Estas opciones de línea de comando se usan:

  • -n bucle alrededor de cada línea del archivo de entrada
  • -l elimina las nuevas líneas antes del procesamiento y las agrega de nuevo en adelante
  • -e ejecuta el código perl

Dado un archivo, ejemplo:

potato: 1234 apple: 5678 potato: 5432 grape: 4567 banana: 5432 sushi: 56789

Me gustaría buscar todas las líneas que comiencen con potato: pero solo pipe los números que siguen a Potato . Entonces, en el ejemplo anterior, la salida sería:

1234 5432

¿Cómo puedo hacer eso?


O use las aserciones de grep -oP ''(?<=potato: ).*'' file.txt regulares: grep -oP ''(?<=potato: ).*'' file.txt


Puedes usar grep, como las otras respuestas dicen. Pero no necesitas grep, awk, sed, perl, cut o cualquier herramienta externa. Puedes hacerlo con pure bash.

Pruebe esto (los puntos y comas están ahí para permitirle poner todo en una línea):

$ while read line; do if [[ "${line%%:/ *}" == "potato" ]]; then echo ${line##*:/ }; fi; done< file.txt

## le dice a bash que elimine la coincidencia más larga de ":" en $ line desde el frente.

$ while read line; do echo ${line##*:/ }; done< file.txt 1234 5678 5432 4567 5432 56789

o si desea la clave en lugar del valor, %% le dice a bash que elimine la coincidencia más larga de ":" en $ línea desde el final.

$ while read line; do echo ${line%%:/ *}; done< file.txt potato apple potato grape banana sushi

La subcadena en la que se divide es ": /" porque el carácter de espacio se debe escapar con la barra invertida.

Puede encontrar más como estos en el proyecto de documentación de Linux .


grep ''potato:'' file.txt | sed ''s/^.*: //''

o

grep ''potato:'' file.txt | cut -d/ -f2

o

grep ''potato:'' file.txt | awk ''{print $2}''

o

grep ''potato:'' file.txt | perl -e ''for(<>){s/^.*: //;print}''

o

awk ''{if(/potato:/) print $2}'' < file.txt

o

perl -e ''for(<>){/potato:/ && s/^.*: // && print}'' < file.txt


sed -n ''s/^potato:[[:space:]]*//p'' file.txt

Uno puede pensar en Grep como un Sed restringido, o de Sed como un Grep generalizado. En este caso, Sed es una herramienta buena y liviana que hace lo que usted desea, aunque, por supuesto, existen otras formas razonables de hacerlo también.