Estou criando um script de shell Bash para fazer alguma manipulação de arquivos em alguns arquivos HTML.
Entre as muitas ações que faço, tenho este comando sed
que funciona muito bem:
find $DIR -type f -name '*.html' -exec sed -i 's/.*<script type="text\/javascript" charset="utf-8" src="file.js"><\/script>.*/<script type="text\/javascript" charset="utf-8" src="file2.js"><\/script>/g' {} \;
Ele examina todos os arquivos HTML no diretório em questão e substitui uma linha de texto.
Eu queria fazer algo semelhante, onde substituo várias linhas entre dois comentários HTML.
Então, quero levar isso em consideração:
<!-- STARTREPLACE1 -->
Blah
Blah
Blah
<!-- ENDREPLACE1 -->
E altere para:
<!-- STARTREPLACE1 -->
A whole new world!
<!-- ENDREPLACE1 -->
Eu encontrei este comando awk
que parece funcionar quando eu o executo em um arquivo:
awk '/<!-- STARTREPLACE1 -->/{p=1;print;print "A whole new world!"}/<!-- ENDREPLACE1 -->/{p=0}!p' justonefile.html
Então, pensei em fazer a mesma função find
que uso com sed
e aplicar esse método aqui para executar este comando awk
em todos os arquivos HTML no diretório:
find $DIR -type f -name '*.html' -exec awk '/<!-- STARTREPLACE1 -->/{p=1;print;print "A whole new world!"}/<!-- ENDREPLACE1 -->/{p=0}!p'
Mas quando eu o executo, diz:
find: '-exec' no such parameter
Existe alguma maneira de eu conseguir que meu comando awk seja executado em todos os arquivos HTML?
Pergunta bônus: Posso também remover as duas tags em torno do texto que quero substituir? Por isso, <!-- STARTREPLACE1 -->
e <!-- ENDREPLACE1 -->
são removidos e só acabo com:
A whole new world!