Düzgün Deyimler (Regular Expressions)

Next: Sed Kaynak Dosyası Up: SED (Stream editor) Previous: Örnekler

## Düzgün Deyimler (Regular Expressions)

Sed, UNIX üzerinde metin işleyen birçok program gibi düzgün deyimlerden 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 's/ $//' dosya

Sed komutu satır sonundaki bulunan boşluk karakterini 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:

    sed 's/^..//' dosya

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.

    sed 's/[A-Z]//g' dosya

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.

    sed 's/^ *//' dosya

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.

    sed 's/[^ ]*$//' dosya

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

Next: Sed Kaynak Dosyası Up: SED (Stream editor) Previous: Örnekler