É claro que sed e awk podem fazer isso, mas estou tendo um pouco de dificuldade para entender exatamente qual é a sua pergunta. O que exatamente está causando problemas? Inserindo novas linhas? Substituindo-os?
Frabjous
Respostas:
19
Sed é muito ruim nisso, porque opera uma linha de cada vez. A única técnica decente que eu já vi fazer isso é essa , que envolve armazenar o arquivo inteiro no buffer de espera do sed e, em seguida, operar tudo de uma vez:
sed -n '1h;1!H;${g;s/search/replace/;p;}'
Se você puder, é muito mais fácil usar o perl para fazer isso:
perl -0pe's/search/replace/'
searchpode conter \ns para representar novas linhas
Você pode explicar o que a linha de comando args para perl faz?
Michael
11
@ Michael -0define o separador de registros como nulo, para que todo o arquivo seja lido de uma vez em vez de linha por linha. -pfaz imprimir o resultado após a substituição. -eele usa o próximo argumento como a expressão a ser executada e s/search/replace/é essa expressão
Respostas:
Sed é muito ruim nisso, porque opera uma linha de cada vez. A única técnica decente que eu já vi fazer isso é essa , que envolve armazenar o arquivo inteiro no buffer de espera do sed e, em seguida, operar tudo de uma vez:
Se você puder, é muito mais fácil usar o perl para fazer isso:
search
pode conter\n
s para representar novas linhasfonte
sed
multiliner.-0
define o separador de registros como nulo, para que todo o arquivo seja lido de uma vez em vez de linha por linha.-p
faz imprimir o resultado após a substituição.-e
ele usa o próximo argumento como a expressão a ser executada es/search/replace/
é essa expressão