Sì, ci sono molti modi per farlo. Puoi usare awk
, perl
o anche bash
per fare queste attività. In generale, tuttavia, sed
è probabilmente lo strumento più indicato per svolgere questo tipo di attività.
Esempi
Supponiamo di avere questi dati di esempio, in un file 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
Modifica in linea
Gli esempi sopra possono anche modificare direttamente i file. L'esempio Perl è banale. Aggiungi semplicemente l' -i
interruttore.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Perché awk
è un po 'meno diretto ma altrettanto efficace:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Questo metodo crea una sotto-shell con le parentesi graffe '{...} `in cui il file viene reindirizzato al suo interno tramite questo:
$ { ... } < data.txt
Una volta che il file è stato reindirizzato nella sotto-shell, viene eliminato e quindi awk
eseguito sul contenuto del file letto nella sotto-shell STDIN. Questo contenuto viene quindi elaborato awk
e riscritto con lo stesso nome file che abbiamo appena eliminato, sostituendolo efficacemente.
$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
. Inoltre, molti strumenti e lingue possono anche eseguire la sostituzione di stringhe di testo semplice. Quindi la tua domanda è in qualche modo ampia.