Como fazer grep em HTML usando GNU grep 2.12 e bash 4.2.37?

Como fazer grep em HTML usando GNU grep 2.12 e bash 4.2.37?

Nunca usei grep para analisar arquivos HTML e estou tendo o seguinte problema:

grep -Po "(?s)(<h2>.+?<!-- /endcontent -->)" input.html > output.html
-bash: !--: event not found

Eu também tentei…

grep -Po "(?s)(<h2>.+?\<!-- \/endcontent --\>)" input.html > output.html

… para nenhum proveito.

Existe uma maneira de fazer com que o grep/bash analise arquivos HTML ou há outro aplicativo que devo usar?

Obrigado.


Editar: parece que há um truque entre o shell e o grep. Procurar pela string exata "test" funciona, mas nem "t.st" nem 't.st' funcionam. Alguém sabe por quê?


Editar: é a opção "-P" que quebra o regex, por algum motivo.


Editar: Sim, a opção "-P" requer a duplicação do caractere ponto que representa qualquer caractere. Esquisito.

grep -Po 't..st' input > output

Responder1

Tente usar aspas simples ', assim:

grep -Po '(?s)(<h2>.+?<!-- /endcontent -->)' input.html > output.html

Grep age de maneira diferente quando as coisas estão entre aspas duplas.

informação relacionada