Sí, hay una variedad de formas de hacer esto. Puede usar awk
, perl
o bash
para hacer estas actividades también. Sin embargo, en general sed
es probablemente la herramienta más adecuada para realizar este tipo de tareas.
Ejemplos
Digamos que tengo estos datos de muestra, en un archivo 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
Edición en línea
Los ejemplos anteriores también pueden modificar directamente los archivos. El ejemplo de Perl es trivial. Simplemente agregue el -i
interruptor.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Porque awk
es un poco menos directo pero igual de efectivo:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Este método crea un sub-shell con las llaves '{...}' donde el archivo se redirige a él a través de esto:
$ { ... } < data.txt
Una vez que el archivo ha sido redirigido al subconjunto, se elimina y luego awk
se ejecuta contra el contenido del archivo que se leyó en los subconjuntos STDIN. Este contenido se procesa awk
y se vuelve a escribir en el mismo nombre de archivo que acabamos de eliminar, reemplazándolo efectivamente.
$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
. Además de eso, muchas herramientas e idiomas también pueden reemplazar cadenas de texto sin formato. Entonces su pregunta es de alguna manera amplia.