EnderUNIX Team.


EnderUNIX İpucu

Arkadaşıma gönder , Ana Sayfa

[ Perl ]

"Dosyada içerik bulma, değiştirme (find/replace)" - Murat Sürücü - (2009-05-07 19:54:26)   [4487]

Perl ile Regex destekli arama ve değiştirme yapmak kabaca şu şekildedir.

Bir dosyanın içinde geçen tüm 'ahmet' leri 'mehmet' yapmak için;

#perl -pi.bak -0777ne 's/ahmet/mehmet/g;' dosyaadi.test

Bunun sonucunda içindeki tüm 'ahmet'ler 'mehmet' olmuş bir 'dosyaadi.test' dosyamiz ve orjinal hali korunan 'dosyaadi.test.bak' dosyamız oluşmuş olur.

Belli bir başlangıç ve bitiş ''imza''sı olan ve birden fazla satır içeren verileri silmek veya değiştirmek içinse aşağıdaki kodu kullanabiliriz;

#perl -pi.bak -0777ne 's/imza_ust_1(?:.|[\r\n])*?imza_alt_1[\r\n]/silindi/g;' ornekdosya

Bu komut sayesinde 'ornekdosya' adındaki dosyanın içinde bulunan 'imza_ust_1' ve 'imza_alt_1' imzalarıda dahil arasında kalan ve dosya içinde varsa tekrarlanan bu şekildeki tüm içerikler 'silindi' yazısıyla değiştirilmiş, orjinal halide 'ornekdosya.bak' olarak saklanmış olur.

------------------------------

Eğer değiştirme işlemi değil de sadece aradığımız kriterlere uyan metinleri ekrana basmak istersek de şu şekilde bir komut girebiliriz;

#perl -0777ne 'print m/ahmet/g;' dosyaadi.test

Bu komut sayesinde 'dosyaadi.test' dosyasında bulunan 'ahmet'leri ekrana basmış olduk.

Eğer belli bir imza arasında olan metinleri ekrana basmak istersek de;

#perl -0777ne 'm/imza_ust_1(?:.|[\r\n])*?imza_alt_1[\r\n]/g;' ornekdosya

komutunu kullanabiliriz. Bu sayede 'imza_ust_1' ile 'imza_alt_1' arasında kalan ve dosya içerisinde bu şekilde varsa tekrarlayan metinleri ekrana basmış olduk.

Regex destekli arama/değiştirme işlemleri için http://www.regular-expressions.info/examples.html kaynağına da başvurabilirsiniz.

Arkadaşıma gönder , Ana Sayfa