Ubuntu substitui expressão em dir e todos os subdiretórios

0

Como posso substituir uma expressão que tem uma barra com outra em todos os diretórios e subdiretórios?

Eu usei isso para encontrar: grep -rnw "/var/www/site" -e "app/COD1"

E agora eu quero substituir: "app / COD1" por "app2 / COD2" em todos os arquivos.

Eu cd para o diretório / var / www / site e tentei com: sed -i 's,app/COD1,app2/COD2,g' * e sed -i 's/'app/ABC'/'apps/ABC'/g' * sem sorte ...

danny2015
fonte

Respostas:

0

Você precisa da -eopção de especificar um comando na linha de comandos. Dado isso, o seguinte funciona para mim:

$ cat file.txt
app/COD1
app/COD2
app2/COD1
app/COD1
app/COD1
$ sed -i -e "s,app/COD1,app2/COD2,g" file.txt
$ cat file.txt
app2/COD2
app/COD2
app2/COD1
app2/COD2
app2/COD2

O uso de barras invertidas também funciona, caso você esteja substituindo algo que pode ter vírgulas (ou qualquer delimitador que você escolher):

$ sed -i -e "s/app\\/COD1/app2\\/COD2/" file.txt
blm
fonte
Olá, o código funciona para um arquivo, mas, como afirmei no título, preciso substituir essa sequência em todos os arquivos de um diretório e todos os subdiretórios. Eu cansei de sed -i -e "s, app / COD1, app2 / COD2, g" *, mas recebo um erro na primeira pasta encontrada: sed: não foi possível editar o bin: não é um arquivo comum
danny2015
mas funciona assim :) grep -rl 'app / COD1' / var / www / site | xargs sed -i-e "s, app / COD1, app2 / COD2, g"
danny2015
@ danny2015 Ok, sim, eu deveria ter me expandido para fornecer uma solução "completa" usando xargsou while read, embora não tenha percebido que essa era a parte que estava lhe causando problemas. Se você incluísse o erro do seu primeiro comentário acima na pergunta em si, o que tornaria mais claro o problema que estava vendo, "sem sorte" não é muito útil. Ainda bem que minha resposta ajudou um pouco.
blm
0
grep -rl 'app/ABC' /opt/apps/ABC | xargs sed -i -e "s,app/ABC,apps/ABC,g"
danny2015
fonte
Parabéns por resolver seu problema. No entanto, mesmo que você esteja respondendo sua própria pergunta, preferimos que as respostas contenham alguma explicação.
Scott