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