Sim, há várias maneiras de fazer isso. Você também pode usar awk
, perl
ou bash
para realizar essas atividades. Em geral, embora sed
seja provavelmente a ferramenta mais apropriada para realizar esses tipos de tarefas.
Exemplos
Digamos que eu tenha esses dados de amostra, em um arquivo data.txt
:
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
awk
$ awk '{gsub("foo", "foofoofoo", $0); print}' data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Perl
$ perl -pe "s/foo/foofoofoo/g" data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Edição in-line
Os exemplos acima podem modificar diretamente os arquivos também. O exemplo do Perl é trivial. Basta adicionar a opção -i
.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Para awk
, é um pouco menos direta, mas igualmente eficaz:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Este método cria um sub-shell com as chaves '{...}' onde o arquivo é redirecionado para ele via isso:
$ { ... } < data.txt
Depois que o arquivo for redirecionado para o sub-shell, ele é excluído e, em seguida, awk
é executado no conteúdo do arquivo que foi lido nas sub-shells STDIN. Este conteúdo é então processado por awk
e escrito de volta para o mesmo nome de arquivo que acabamos de excluir, efetivamente substituindo-o.