Evet, bunu yapmanın çeşitli yolları var. Sen kullanabilirsiniz awk, perlya da bashsıra bu faaliyetleri yapmak. Genel olarak sed, muhtemelen bu tür görevleri yapmak için en apropos aracıdır.
Örnekler
Diyelim ki bir dosyada bu örnek veriler var 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
Satır içi düzenleme
Yukarıdaki örnekler dosyaları doğrudan değiştirebilir. Perl örneği önemsizdir. Sadece -ianahtarı ekleyin .
$ perl -pie "s/foo/foofoofoo/g" data.txt
Çünkü awkbiraz daha az doğrudan ama aynı derecede etkili:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Bu yöntem, parantez '{...} `ile bir alt kabuk oluşturur ve burada dosya bu dosyaya yeniden yönlendirilir:
$ { ... } < data.txt
Dosya alt kabuğa yönlendirildikten sonra silinir ve awkSTDIN alt kabuklarına okunan dosyanın içeriğine karşı çalıştırılır. Bu içerik daha sonra awk, yeni sildiğimiz dosya adıyla işlenir ve yeniden adlandırılır ve etkin bir şekilde değiştirilir.
$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. Bunun yanı sıra, birçok araç ve dil düz metin dizesi değiştirme de yapabilir. Yani sorunuz bir şekilde geniş.