
¿Cómo puedo hacer que herramientas como grep
tratar 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 grep
busco 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 sed
o awk
para obtener el mismo resultado.
Respuesta1
Al awk
configurar 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 ...