¿Puedo hacer que grep trate varias líneas escapadas como una sola línea?

¿Puedo hacer que grep trate varias líneas escapadas como una sola línea?

¿Cómo puedo hacer que herramientas como greptratar líneas múltiples escapadas con una barra invertida como una sola línea larga?

Digamos que tengo algunos archivos que se ven así:

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

Si ahora grepbusco testvar, regresará testvar=test1 \, pero ¿hay alguna manera de que pueda regresar testvar=test1 test2 test3?

Más o menos, ¿cómo tratar esas múltiples líneas de escape como una sola línea?

Nota: Si esto no se puede hacer con grep, también son bienvenidas sugerencias sobre cómo hacerlo con otras herramientas como sedo awkpara obtener el mismo resultado.

Respuesta1

Al awkconfigurar el separador de campos y los separadores de registros según su caso de uso:

awk 'BEGIN { FS="\n"; RS ="" } /testvar/' yourfile
testvar=test1 \
        test2 \
        test3

Consulte la entrada manual pararegistros de varias líneas.

Respuesta2

Puedes preprocesarlo con algo que una esas líneas, como:

awk 'match($0,/\\+$/) && RLENGTH % 2 {
       sub(/\\$/,""); printf "%s", $0; next
     }
     {print}' | grep ...

información relacionada