Posso fazer com que o grep trate a multilinha escapada como uma única linha?

Posso fazer com que o grep trate a multilinha escapada como uma única linha?

Como posso criar ferramentas como greptratar multilinhas escapadas com uma barra invertida como uma linha longa e única?

Digamos que eu tenha alguns arquivos parecidos com estes:

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

Se eu agora grepusar testvar, ele retornará testvar=test1 \, mas há alguma maneira de fazê-lo retornar testvar=test1 test2 test3?

Mais ou menos como tratar essas múltiplas linhas de escape como uma única linha?

Observação: Se isso não puder ser feito com grep, dicas sobre como fazer isso com outras ferramentas como sedou awkpara obter o mesmo resultado também são bem-vindas.

Responder1

Ao awkdefinir o separador de campos e os separadores de registros de acordo com seu caso de uso:

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

Consulte a entrada manual pararegistros de múltiplas linhas.

Responder2

Você pode pré-processá-lo com algo que una essas linhas, como:

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

informação relacionada