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.

glisignoli
fonte
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

Michael Mrozek
fonte
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