sed aracı ile bul ve değiştir

30/04/2009

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.

Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

*