Posso fazer o grep tratar multilinhas com escape como uma única linha?

3

Como posso fazer ferramentas como grep tratar multilinhas escapadas com uma barra invertida como uma única linha longa?

Digamos que eu tenha alguns arquivos com esta aparência:

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

Se eu agora grep para testvar ele retornará testvar=test1 \ , mas existe alguma maneira que eu possa ter retornado 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 sed ou awk para obter o mesmo resultado também serão bem-vindas.

    
por Johan 22.04.2013 / 10:07

2 respostas

3

Com awk configurando o separador de campos e registrando os separadores no seu caso de uso:

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

Veja a entrada manual para registros de várias linhas .

    
por 22.04.2013 / 10:49
2

Você pode pré-processar com algo que junte essas linhas, como:

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