Substituir string em vários arquivos usando find e sed

3

Então cheguei à conclusão de que, para recursivamente substituir todas as instâncias de uma string no diretório (somente para arquivos de extensões .java), preciso usar

find . -type f -name "*.java" -exec sed -i 's/original/result/g' {} +

No entanto, o que eu faço se a string que estou tentando substituir contiver / ?

Por exemplo, eu quero substituir a string /*Comment*/ por algumas palavras normais, quais delimitadores devo usar, para que o sed funcione corretamente?

    
por spacing 17.11.2016 / 22:09

2 respostas

2

Escape da barra, escrevendo \/ Você também pode fazer:

perl -pi -e 's!original!result!g' *java

usando ! como um delimitador em vez de / . Isso é um pouco mais curto do que usar o recurso Localizar & sed.

    
por 17.11.2016 / 22:17
3

Você pode usar qualquer delimitador usando sed também (não apenas com perl como @ vesa-karjalainen sugerido), por exemplo

find . -type f -name "*.java" -exec sed -i 's:original:result:g' {} +
    
por 17.11.2016 / 22:33