Evet, bunu yapmanın çeşitli yolları var. Sen kullanabilirsiniz awk
, perl
ya da bash
sı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 -i
anahtarı ekleyin .
$ perl -pie "s/foo/foofoofoo/g" data.txt
Çünkü awk
biraz 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 awk
STDIN 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ş.