/ / Bash: qualquer comando para substituir strings em arquivos de texto? - bash, shell, substituir, processamento de texto

Bash: qualquer comando para substituir strings em arquivos de texto? - bash, shell, substituir, processamento de texto

Eu tenho uma hierarquia de diretórios contendo muitosarquivos de texto. Eu gostaria de procurar por uma determinada seqüência de texto toda vez que ela aparece em um dos arquivos e substituí-la por outra. Por exemplo, posso querer substituir cada ocorrência da string "Coke" por "Pepsi". Alguém sabe como fazer isso? Eu estou querendo saber se há algum tipo de comando Bash que pode fazer isso sem ter que carregar todos esses arquivos em um editor, ou chegar a um script mais complexo para fazê-lo.

eu encontrei esta página explicando um truque usando sed, mas não parece funcionar em arquivos em subdiretórios.

Respostas:

15 para resposta № 1

Usar sed em combinação com find. Por exemplo:

find . -name "*.txt" | xargs sed -i s/Coke/Pepsi/g

ou

find . -name "*.txt" -exec sed -i s/Coke/Pepsi/g {} ;

(Veja a man page em encontrar mais informações)


3 para resposta № 2

Combine sed com encontrar assim:

find . -name "file.*" -exec sed -i "s/Coke/Pepsi/g" {} ;

3 para resposta № 3

IMO, a ferramenta com o uso mais fácil para essa tarefa é rpl:

rpl -R Coke Pepsi .

(-R é para substituição recursiva em todos os subdiretórios)


3 para resposta № 4

find . -type f -exec sed -i "s/old-word/new-word/g" {} ;


2 para resposta № 5

Eu costumo fazê-lo em perl. No entanto, atente - ele usa regexps que são muito mais poderosos do que a substituição normal de strings:

% perl -pi -e "s/Coke/Pepsi/g;" $filename

EDITAR Eu esqueci subdiretórios

% find ./ -exec perl -pi -e "s/Coke/Pepsi/g;" {} ;

2 para resposta № 6

você quer uma combinação de find e sed


0 para resposta № 7

Voce pode tambem:

Pesquise e substitua por find & ed

http://codesnippets.joyent.com/posts/show/2299

(que também possui um modo de teste via sinalizador -t)