Antes de tudo, verifique se você está usando cotações ascii regulares, como "
e '
(códigos ascii 0x22
e 0x27
, respectivamente) em scripts de shell, porque o exemplo em sua postagem contém não caracteres de cotação padrão. Se você olhar de perto, eles parecem um pouco diferentes. Muito provavelmente, este é um erro de copiar e colar de um formato de documento rich text como Word, OOWriter ou até mesmo uma janela do navegador.
Já que você está em um Mac, você provavelmente tem a implementação do FreeBSD de sed
, nesse caso você tem que escrever o comando desta forma:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(aqui usando +
em vez de \;
para evitar a execução de uma invocação de sed
por arquivo).
Na implementação do FreeBSD de sed
o -i
flag precisa de um argumento: a extensão de um arquivo de backup. Por exemplo, com -i .bak
, o comando faria o backup de file1.txt
como file1.txt.bak
antes de executar a substituição no arquivo original. Usando um argumento vazio ''
significa não usar um arquivo de backup, que parece ser o que você deseja.
A mesma coisa na implementação do GNU (ou NetBSD, OpenBSD, busybox) seria:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Obrigado @bahamat e @ Mikel e @pieter-breed para melhorar minha resposta com seus comentários.