
Como posso criar ferramentas como grep
tratar 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 grep
usar 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 sed
ou awk
para obter o mesmo resultado também são bem-vindas.
Responder1
Ao awk
definir 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 ...