Sed, UNIX üzerinde metin işleyen birçok program gibi düzenli ifadelerden
yararlanır. Aşağıdaki bu duruma birkaç örnekle yer veriliyor.
'^' karakteri satır başlangıcını gösterir. Bu komut,
sed 's/^Pts /Pazartesi/' dosya
bir satırın başında ``Pts'' varsa bunu ``Pazartesi'' haline getirir. Dikkat
ederseniz komut dahilinde `g' işleci kullanılmamıştır. Çünkü her satırda
sadece bir satır başı olabilir.
$ karakteri satır sonunu belirtir. Aşağıdaki örnekte,
Sed komutu satır sonundaki tüm boşluk karakterlerini siler.
Her satır sonuna ``SATIR_SONU'' karakter kümesini getirmek için
sed 's/$/SATIR_SONU/' dosya
yazılabilir. Boş bir satırı bulmak için satır başı ve satır sonu
belirteçleri birlikte kullanılır.
sed 's/^$/bu daha once bos bir satirdi/' dosya
`.' (nokta) karakteri herhangi bir karakter anlamına gelir. Örneğin
üzerinde işlem yapacağımız dosyada bütün satırlardaki ilk iki karakteri
silmek için:
Köşeli parantezler birden fazla sayıda karakter içinde seçim yapar.
sed 's/[Oo]pen[Ww]in/openwin/g' dosya
Alfabedeki iki karakterin arasındaki tüm karakterleri seçmek için köşeli
parantezlerin içinde `-' karakteri kullanılabilir. Bu karakter, sağındaki
ve solundaki de dahil olmak üzere aradaki tüm harfleri seçer. Örnek
dosyadaki tüm büyük harfleri silelim.
Bir karakter kümesinin dışında kalan karakterleri seçmek için ise
`^'
kullanılır. Örnek dosyada, rakamların ve küçük harflerin dışındaki tüm
harfleri silmek istiyoruz.
sed 's/[^1-9a-z]//g' dosya
'*' karakteri, kendisinden bir önce gelen karakterin veya küme
içine alınmış karakter gruplarının sıfır veya daha fazla tekrarı
anlamına gelir.
komutu her satır başındaki boşluk karakterlerini
siler. Aşağıdaki sed komutu her satırdaki son kelimeyi (boşluk
karakterlerinden oluşmayan karakterler grubunu) siler.
unutulmaması gereken bir nokta, `*' karakteri önceki grubun
sıfır kere tekrarını da gözönüne alır, bu durumda aşağıdaki satırda
görülen ve bir tamsayı değerini ``TAMSAYI'' sözcüğü haline getirmek için
kullanılan komut Linux tarafından yanlış işletilecektir.
sed 's/ [0-9]* / TAMSAYI /g' dosya
Bu satır aynı zamanda her boşluk karakterini ``TAMSAYI'' ya çevirir. Bunu
engellemek için, en azından bir haneyi arama kapsamına sokmak gerekir:
sed 's/ [0-9][0-9]* / TAMSAYI /g' dosya
`.* harf kombinasyonu herhangi bir sayıda karakter grubu
anlamındadır. Aşağıdaki örnekte, ``ku'' ve ``ik'' arasında ne olursa olsun
bulunan satırı değiştirecek ve bunların yerine ``kuru erik'' koyacaktır.
sed 's/ku.*ik/kuru erik/g' dosya
Buraya kadarki bölümde eşleştirdiğimiz harf veya harf gruplarını ya
başka bir forma soktuk ya da tamamen sildik. Ancak sed'in kelime işleme
kapasitesi sadece yaptıklarımızla sınırlı değildir. `\('
ve `\)' operatörleri yardımıyla eşleştirildiği anda hafızaya
kaydedilen kelime grupları daha sonra tekrar çağırılabilir. Parantezler
özel anlamlı karakterlerin anlamlarını yitirmesini sağlamak
amacıyla daha önceki kullanıma uygun konulmuşlardır. İlk kullanılan
`\(\)' operatörü `\1' adlı alana, ikinci
kullanılan `\(\)' operatörü `\2' adlı alana
eşleştirilir (kayıt edilir). Aşağıdaki sed komutu,
sed 's/^\([A-Za-z][A-Za-z]*\) \([A-Za-z][A-Za-z]*\)/\2 \1/' dosya
bir dosyadaki ``isim soyisim'' sırasını ``soyisim isim'' sırasına çevirmekte
kullanılabilir. Örnek olarak içeriği aşağıdaki gibi olan bir dosya
üzerinde bu komut çalıştırılırsa
Mehmet Kırk
Biray Çift
Gürkan Ballı
ekranda aşağıdaki çıktı görünür:
Kırk Mehmet
Çift Biray
Ballı Gürkan
Bazı durumlarda tüm dosya üzerinde değil de bazı özellikleri sağlayan
satırlar üzerinde işlem yapmak isteyebilirsiniz. Bunun için 'adresleme'
yapmanız gerekir. Adresleme işlemi, `s işlecinden hemen önce yapılır. Bu
komut ile dosyanın sadece 1 ve 20. satırları arasında işlem yapılacaktır.
sed '1,20s/Karadeniz/Akdeniz/g' dosya
``Makina'' kelimesiyle başlayan tüm satırlardaki ``Endüstri'' kelimesi yerine
``Elektronik'' kelimesini yerleştirelim.
sed '/^Makina/s/Maden /Elektronik /g' dosya
``Makina'' kelimesiyle başlamayan tüm satırlara benzer işlemi
uygulayalım. `!' karakterinin yerine dikkat edin.
sed '/^Makina/!s/Maden /Elektronik /g' dosya