test regulares regular probar online expresiones expresion espacio ejemplos crear blanco alfanumerico regex sed awk grep

regulares - javascript regex test



Expandiendo un bloque de texto, expresiones regulares (3)

Dado un gran archivo de registro, ¿cuál es la mejor manera de grep un bloque de texto?

text to be ignored more text to be ignored --- <---- start capture here lots of text with separators like "---" --- spanning multiple lines --- <---- end capture here text to be ignored more text to be ignored

¿Lo que se sabe?

  • Número máximo de caracteres en la línea (55 pero puede ser menor)
  • Número de líneas en un bloque
  • Separador (que puede repetirse)

¿Qué expresión regular coincidiría con este bloque? Resultado deseado: lista de bloques de texto.

Por favor asuma el entorno de línea de comandos de Linux


Hace varios años usé esto para dividir parches en trozos:

sed -e ''$ {x;q}'' -e ''/@@/ !{H;d}'' -e ''/@@/ x'' # note - i know sed better now

Reemplazar /@@/ con /---/ .

Para eliminar todo antes del primer ''---'' y después del último ''---'' agregue -e ''1,/---/d'' y elimine todo -e ''$ {x;q}'' .

El resultado sería así:

sed -e ''1,/---/d'' -e ''/---/ !{H;d}'' -e x

Acabo de probarlo y funciona con el ejemplo dado.


Mantenlo simple:

$ awk ''NR==FNR {if (/^---/) { if (!start) start=NR; end=NR } next} FNR>=start && FNR<=end'' file file --- <---- start capture here lots of text with separators like "---" --- spanning multiple lines --- <---- end capture here $ awk ''NR==FNR {if (/^---/) { if (!start) start=NR; end=NR } next} FNR>start && FNR<end'' file file lots of text with separators like "---" --- spanning multiple lines


Si tiene suficiente memoria, puede usar la siguiente línea. Sin embargo, tenga en cuenta que leerá todo el archivo de registro en la memoria.

perl -0777 -lnE ''m{ ^--- .+ ^--- }xms and say $&'' logfile