sed aracı ile bul ve değiştir
Metin editörlerinde bul ve değiştir fonksiyonu her zaman işimize yaramıştır. Metnin içerisinde birçok yerde geçen ve değiştirmemiz gereken sabit bir string olduğunda aynı değişikliği tek tek yapmak zorunda kalmak bazen işkenceye dönüşebilir. Linux içerisinde bu işi yapmamızı sağlayan kullanışlı bir editör var. sed kullanarak metnin içerisine girip işlemleri oradan yapamadığımız için editör demek tam olarak doğru değil. sed sadece metnin dışından find&replace yapmamızı sağlayan bir araç.
sed nasıl çalışır?
sed aracı belirtilen dosyayi satır satır okur ve komutta belirtilen işlemi yaparak ekrana çıktı olarak verir. Yani dosya içerisinde bir değişiklik yapmaz sadece ekrana çıktı verir. E o zaman bu ne işime yaradı diyeceksiniz. Eğer ikinci bir dosya ismi verilirse değişiklikleri bu dosyaya kaydeder. Böylelikle istenmeyen değişiklikleri önler. Örneklerle anlatalım.
Sed’in komut sentaksı               sed [opsiyonlar] ‘{komut}’ [dosya ismi] şeklindedir.
Â
Substitute iÅŸlemi
Burada komut           ‘s/{eski deÄŸer}/{yeni deÄŸer}/’                    şeklinde kullanılır.
 $ echo could you smile a little smile for me | sed ‘s/little/big/’
$ could you smile a big smile for me
Görüldüğü gibi little kelimesi big gelimesine çevrildi.
Â
Çoklu değişiklik
-e opsiyonu kullanılır.
 $ echo could you smile a little smile for me | sed -e ‘s/little/big/’ -e ‘s/smile/laugh/’
$ could you laugh a big smile for me
Burada -e yerine ; kullanarak komutu daha sade bir şekilde kullanabilirdik. İkisi de aynı kapıya çıkar.
$ echo could you smile a little smile for me | sed -e ‘s/little/big/; s/smile/laugh/’
$ could you laugh a big smile for me
Dikkat ettiyseniz ikinci smile kelimesi laugh olarak değişmedi. Bunun için global opsiyonunu kullanmak gerekiyor.
Â
Global DeÄŸiÅŸiklikler
sed ile belirttiğimiz komut içerisinde g opsiyonunu kullanmalıyız.
$ echo could you smile a little smile for me | sed ‘s/smile/laugh/g’
$ could you laugh a little laugh for me
g opsiyonunu kullanmazsak sed satır içerisinde ilk rastladığı değeri değiştirecek ve aynı satırdaki diğer değeri aynı şekilde bırakacaktır.
Â
Dosya kullanarak birkaç örnek
Dosyamızın içeriği aşağıdaki gibi olsun;
$ cat sed.txt
ankara                00
istanbul              00
izmir                    00
ankara                00
izmir                    00
istanbul              00
Â
ankara bulunan satırlarda 00 değerini 06 yapalım.
$ sed ‘/ankara/ s/00/06/’ sed.txt
ankara                06
istanbul              00
izmir                    00
ankara                06
izmir                    00
istanbul              00
Â
Tüm karşılıkları doğru hale getirelim.
$ sed ‘/ankara/ s/00/06/; /istanbul/ s/00/34/; /izmir/ s/00/35/’ sed.txt
ankara                06
istanbul              34
izmir                    35
ankara                06
izmir                    35
istanbul              34
Â
ikinci ve üçüncü satırdaki değerleri değiştirelim.
$ sed ’2,3 s/00/99/’ sed.txt
ankara                00
istanbul              99
izmir                    99
ankara                00
izmir                    00
istanbul              00
Â
izmir bulunan satırları silelim
$ sed ‘/izmir/ d’ sed.txt
ankara                00
istanbul              00
ankara                00
istanbul              00
Â
değiştirilmiş metni başka bir dosyaya yazmak için
$ sed ‘/ankara/ s/00/06/; /istanbul/ s/00/34/; /izmir/ s/00/35/’ sed.txt > sedyeni.txtÂ
Â
No related posts.