Substituindo várias linhas em sed ou awk [fechado]


9

Estou tentando usar o sed ou o awk para substituir 5 linhas em um arquivo smb, mas simplesmente não tenho idéia de como lidar com as novas linhas.


6
É 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


11
+1 para o sedmultiliner.
Lazer

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
Michael Mrozek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.