Sim, existem várias maneiras de fazer isso. Você pode usar awk
,, perl
ou bash
para executar essas atividades também. Em geral, porém, sed
é provavelmente a ferramenta mais adequada para realizar esses tipos de tarefas.
Exemplos
Digamos que eu tenho 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 embutida
Os exemplos acima também podem modificar diretamente os arquivos. O exemplo Perl é trivial. Basta adicionar a -i
opção.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Pois awk
é um pouco menos direto, mas igualmente eficaz:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Este método cria um sub-shell com chaves '{...} `, onde o arquivo é redirecionado para ele através deste:
$ { ... } < data.txt
Depois que o arquivo é redirecionado para o sub-shell, ele é excluído e, em seguida, awk
é executado no conteúdo do arquivo que foi lido nos sub-shells STDIN. Esse conteúdo é então processado awk
e gravado novamente no mesmo nome de arquivo que acabamos de excluir, substituindo-o efetivamente.
$var=~s/a/b/g
,gsub(/a/,"b",var)
,var.gsub(/a/,'b')
,var.replace(/a/g,'b')
,preg_replace("/a/","b",$var)
,regsub -all a b $var
. Além disso, muitas ferramentas e idiomas também podem substituir a string de texto sem formatação. Portanto, sua pergunta é de alguma forma ampla.