SED (Stream Editor)
Sed bir dosyadan veya standart girdiden(klavyeden) bilgi okur ve okuduğu bilgileri kullanıcının belirlediği düzene sokarak yazar.
Dosya görüntüleme
sed -n "p" ceren_dosya komutu ile dosya içeriği görüntülenebilir. Veya daha yaygın olarak cat komutu ile dosya içeriği görüntülenebilir. Örneğin cat ceren_dosya komutu “ceren_dosya”nın içeriğini görüntüler.
Örnek:
Satir no:1
Satir no:2
Satir no:3
Satir no:4
sed -n '2,4p' ceren_dosya bu komut ceren_dosya içerisindeki 2. ile 4. satır arasını gösterecektir.
=> Satir no:2
=> Satir no:3
Değişiklik yapma (substitute)
Sed kullanırken en çok kullanacağımız komut “s” komutudur. Bir karakteri veya karakter kümesini başka bir diziye çevirmeye yarar. Buna basit bir örnek :
Örnek:
Geçen salı casper computer'dan bilgisayar satın aldım.
sed 's/computer/bilgisayar/g' ceren_dosya
Bu komut ceren_dosya içerisindeki computer kelimesini bilgisayar'a çevirecektir. En sonda g parametresi satırın tamamını kontrol etmesini sağlar. Aksi takdirde her satırda sadece ilk “computer” kelimesini değiştirip bir sonraki satıra geçer.
=> Geçen salı casper bilgisayar'dan bilgisayar satın aldım.
Şartlı değişiklik
Örnek-1:
yeşil turuncu mavi siyah
sarı eflatun mavi kırmızı
sed '/sarı/s/mavi/kırmızı/' ceren_dosya => Bu komut satırı sadece içerisinde “ceren” geçen satırlarda “mavi” kelimesini “kırmızı” olarak değiştirir.
=> yeşil turuncu mavi siyah
=> sarı eflatun kırmızı kırmızı
Örnek-2:
Taksim – Mecidiyeköy
Taksim – Kabataş
Ortaköy – Taksim
Aksaray – Taksim
sed '2,4s/Taksim/Şişli/' ceren_dosya => Sadece 2. ve 4. satırlar arasında değişiklik yapar.
=> Taksim – Mecidiyeköy
=> Şişli– Kabataş
=> Ortaköy – Şişli
Silme
Örnek-1:
Satir no:1
Satir no:2
Satir no:3
Satir no:4
sed '1,3d' ceren_dosya bu komut “ceren_dosya” içerisinde 1 ile 3. satır arasını silecektir.
=> Satir no:4
Örnek-2:
Aliye Demirci
Eren Can
Önder Ali Çavuşoğlu
sed '/Ali/d' ceren_dosya girdi bu komut içerisinde “Ali” geçen bütün satırları silecektir.
Kaydetme
Yaptığımız değişikliklerin farklı bir dosyaya kaydolması için komutun sonuna “ > dosya_adı” şeklinde eklememiz gerekir. Örneğin;
sed 's/İçel/Mersin/g' ceren_dosya > cerenb
ceren_dosya içerisinde yaptığımız değişiklik bu komut ile cerenb içerisine kaydolur.
Çoklu işlem
Yapacağımız çoklu değişikliklerde “-e” tagını kullanmamız gerekir.
Örnek-1:
Çankaya / Ankara
Beyoğlu / İstanbul
Sincan / Ankara
sed -e 's/Ankara/ANK/g' -e '2,3d' ceren_dosya
Yukarıdaki komut ceren_dosya içerisinde hem “Ankara” kelimesini “ANK” olarak değiştirecektir, hem de 2 ve 3. satırı silecektir.
=> Çankaya / ANK
* Aynı komutu ikinci kez kullanırken ikinci komuttan önce “-e” yerine “;” ile de ayırabiliriz.
Örnek-2:
sed -e 's/o/O/g; s/e/E/' ceren_dosya
Yukarıdaki komutta o ve e harflerini büyük yaptık. İki işlem de “s” komutunu kullanıyor.
Değiştirme parametreleri (substitution flags)
Değiştirme parametreleri aşağıdaki örnekteki [değiştirme parametresi] kısmına yazılarak kullanılabilir.
sed 's/Ankara/İstanbul/[değiştirme parametresi]' ceren_dosya
Örnek: sed 's/Ankara/İstanbul/6' ceren_dosya
g |
Sıklıkla kullandığımız bu parametre sadece ilk değil bütün eşleşmeler üzerinde değişiklik yapılması için kullanılır |
SAYI |
Satır içerisindeki kaçıncı eşleşme üzerinde değişiklik yapacağımızı sayı girerek ayarlayabiliriz. |
p |
Değişiklik gerçekleşen satırların alt satıra bir kopyasını daha yazar. |
w DosyaAdi |
Değişiklik gerçekleştiği takdirde değişen satırları yeni bir dosyaya kaydeder. |
I i |
Büyük-küçük harf farklılığını ortadan kaldırır. |
* Bir komut içerisinde ardarda yazarak birden fazla değiştirme parametresi kullanılabilir.
Örnek:
Bolu ankara Denizli ANKARA Gaziantep Ankara
sed 's/Ankara/İstanbul/i g' ceren_dosya
=> Bolu İstanbul Denizli İstanbul Gaziantep İstanbul
Adres Aralıkları
'3,6d' |
3 ile 6 arasındaki satırları siler |
'6,3d' |
Sed geriye doğru satır saymadığı için sadece 6. satır silinir. |
'2,+6d' |
2. satır ve sonrasında gelen 6 satır silinir. |
'4,10!d' |
4 ile 10 arasındaki satırlar kalır, diğer satırlar silinir. |
'1~3d' |
1. satır silinir, 3 satır atlar 4. satır silinir, 3 satır atlar 7. satır silinir. Bu şekilde dosya sonuna kadar silme işlemi devam eder. |
'5,8p' |
5 ile 8 arasındaki satırlar görüntülenir. |
'7p' |
Sadece 7. satır görüntülenir. |
Sed Kaynak Dosyası
Kaynak dosyamızı metin belgesine oluşturduktan sonra “-f” parametresiyle çalıştırabiliriz. Örneğin kaynak.txt isimli bir dosya hazırlıyalım ve içerisine aşağıdaki komutları yazıp kaydedelim;
kaynak.txt:
s/a/A/g s/e/E/g s/b/B/g |
Örnek:
bahcelievler
sed -f kaynak.txt ceren_dosya komutunu uyguladığımızda ceren_dosya üzerinde bu değişiklikleri gerçekleştirecektir.
=> BAhcEliEvlEr
Uyarı
Aşağıdaki karakterler sed tarafından kullanılan özel karakterler kapsamına girer. Bu karakterlerin herbirisinin anlamı olduğundan dikkatli kullanılmaları gerekir.
.*[]^$\&
Öncesinde ters slash “\” kullanarak özelliklerini etkisiz hale getirebiliriz. Örneğin;
sed 's/fiyati 500\$ kadar/fiyati 700$/' ceren_dosya
Bu örnekte metinde geçen “fiyati 500$ kadar” ifadesi “fiyati 700$” ile değiştiriliyor.