Düzenli İfadeler (Regular Expressions)


Necati DEMİR (necati.demir@students.comu.edu.tr)
Naciye UZUN (naciye.uzun@students.comu.edu.tr)

version 0.1, Çanakkale 29/05/2003
Lütfen, bu belgede gördüğünüz hataları, eksikleri ve belge ile ilgili eleştirileri -belgenin daha kaliteli bir hale gelebilmesi için- bize bildiriniz.
Bizi bu çalışmaya teşvik ettiği için A. Murat EREN hocamıza teşekkür ederiz.
Bu belgenin son halini http://docs.comu.edu.tr/homemade/regex/regex.html adresinden temin edebilirsiniz


    1. Regex Nedir?
    2. Regex hangi dillerde kullanılır?
    3. Avantajları
    4. Regex'in Temelleri
        4.1. Satır Başları ve Satır Sonları
        4.2. Bir Kaç Karakterin Herhangi Biri İle Uyuşması
        4.3. Herhangi Bir Karakter Dışındakileri Aramak
        4.4. Herhangi Bir Karakter İle Uyuşum-Nokta
        4.5. Bir Kaç İfadenin Herhangi Biri İle Uyuşum
        4.6. Kelimeyi Sınırlamak
        4.7. İsteğe Bağlı Seçenekler
        4.8. Diğer Miktar Belirteçleri
        4.9. Özelleştirilmiş Miktar Belirteçleri
        4.10. Parantezler ve Ters Eğri Çizgiler (Backslashes)
        4.11. Meta karakter Aramak
    5. Tablolar
        5.1. Meta karakter Tablosu
        5.2. Uyumluluk Tablosu
    6. Sed
        6.1. Sed Nedir?  
        6.2. Sed - Verilerin Ara Belleğe Alındığı Yer
        6.3. Sed Parametreleri
        6.4. Sed Programları
        6.5. Sed ile Satır Seçme
        6.6. Komutlar
        6.7. Basit Sed Örnekleri
    7. Regex'in Sed Uygulaması    
    8. Kaynaklar


1. Regex Nedir?


    Regular expressions (düzenli ifadeler) ifadesinin kısaltılmış halidir. Karmaşık katarları belli kalıplar dahilinde tanımlar. Bu kalıplara uyan ifadeleri bulduğu zaman isteğimize göre üzerinde işlem yapar.


2. Regex hangi dillerde kullanılır?


    Düzenli ifadeler, bir çok dilde ve uygulamada kullanılır: egrep, emacs, expect, find, grep, javascript, lex, lips, mawk, mysql, perl, php, vi, tcl, gawk, sed...
Bu yazıdaki düzenli ifade örnekleri sed uygulaması yardımı ile verilecektir.


3. Avantajları


    Düzenli ifadeler, karmaşık katarları belli kalıplara çevirip kullandığı için basittirler ve taşınabilirdirler. Regex mantığını kavradıktan sonra diğer dil ve uygulamalarda kullanmak da kolaydır.


4. Regex'in Temelleri


    Düzenli ifadeler normal karakterler ve meta karakterlerden oluşur. Normal karakterler, büyük - küçük harfleri ve rakamları ifade eder. Meta karakterlerin anlamları ileriki satırlarda açıklanacaktır.

    Basit anlamda düzenli ifade, verdiğiniz kalıba uyan katarı arar. Mesela 'deneme' katarı hiç meta karakter içermez. 'deneme' katarı, 'deneme 123' katarı ile benzeşir ama 'Deneme' katarı ile benzeşmez.

    grep metin arama programına bir düzenli ifade kalıbı verelim: "comu". Bu kalıp c,o,m ve u harflerinin ardışık olanlarını arar ve bulduğu satırları ekrana basar. Ekrana yazılan satırlar şunlar olabilir:

    comu
    comulib
    libcomu

 

   4.1 Satır Başları Ve Sonları

    Anlaşılması en kolay karakterlerden ikisi ^ ve $ karakterleridir. ^ satır başı, $ ise satır sonu anlamına gelir. '^linux' dosya satırbaşlarında linux yazan satırları ekrana basar. Aynı şekilde 'linux$' ise satır sonunda linux yazan satırları ekrana basar.

 

   4.2 Bir Kaç Karakterin Herhangi Biri ile Uyuşması

     'kuma[şr]', kumaş ve kumar kelimelerine eşittir. kumaşr veya kumarş kelimelerine eşit değildir. Aynı şekilde '[dD]emir' ifadesi demir ve Demir'e eşittir. Bu kelimeler diğer kelimelere bitişik olabilir. Mesela aynı kalıp demirkıran kelimesine de eşittir.

    Bu özellik HTML başlıkları ile çalışırken işe yarayabilir: '<H[123456]>' ifadesi <H1>, <H2>, ..., <H3> ifadeleriyle uyuşur. Aynı ifadeyi şu şekilde de yazabiliriz: '<H[1-6]>'. Bu ifade yapacağı iş açısından '<H[123456]>' ifadesi ile birebir aynıdır. Tire (-) işareti menzil belirtir.

    Başka bir örnek: '[a-z]' ifadesi bütün küçük harfleri kapsar. Köşeli parantez içinde iki tire kullanabiliriz. '[a-zA-Z]' ifadesi bütün büyük ve küçük harflerin herhangi birisi anlamına gelir. '[a-z123]id' ifadesi : Küçük harflerden biri veya 1,2,3 rakamlarından birisiyle başlayıp ardından i ve d harfleri takip eden kelimeler anlamına gelir.

 

   4.3 Herhangi Bir Karakter Dışındakileri Aramak

    [1-6] 1 ve 6 arasında ki herhangi bir rakam anlamına gelir. [^1-6] ise bu rakamlar haricindekiler anlamına gelir. ^ karakteri önceden de bahsettiğimiz gibi satır başı anlamına da gelir. Ama buradan, görüldüğü gibi farklı bir amaç için kullanılmıştır. Bunları ayırmak çok basittir; hariç anlamına gelen ^ karakteri köşeli parantez içinde kullanılır.

    Bir kelime listesi oluşturalım ve içinde farklı farklı satırlarda 'linux' ve 'unix' yazsın.

]# grep u[^x] kelime.txt
unix
]#


    Burada her satır araştırılmıştır ve u harfinden sonra x harfinin gelmediği satırlar ekrana yazdırılmıştır.

 

   4.4 Herhangi Bir Karakter İle Uyuşum-Nokta

    Tarihler ülkeden ülkeye değişirler ve farklı şekillerde gösterilebilirler. 23-04-2003, 23/04/2003, 23.03.2003 gibi...

    '23.04.2003' ifadesi bu üç durum ile de uyuşur. Nokta burada meta karakter olarak kullanılmıştır. '23[.-/]04[.-/]2003' ifadesinde ise meta karakter görevinde değildir. Ama unutmamak gerekir ki nokta karakteri herhangi bir karakterle uyuşur. Yani '23.04.2003' düzenli ifadesi '23a04a2003' katarına da eşit olabilir. Bu sebeple böyle durumlarda '23[.-/]04[.-/]2003' ifade kalıbını kullanmak daha mantıklıdır.

 

   4.5 Bir Kaç İfadenin Herhangi Biri İle Uyuşumu

    Birkaç ifadenin herhangi biriyle uyuşum işlemleri için boru '|' karakteri kullanılır. Ne var ki bu karakter her program ve uygulama tarafından desteklenmemektedir. '|' veya anlamına gelir. 'ben|sen' içersinde ben veya sen bulunan katarlar anlamına gelir.

]# cat deneme
ben miyim?
sen misin?
o mu?
]# egrep '(ben|sen)' deneme
ben miyim?
sen misin?
]# egrep '(b|s)en' deneme
ben miyim?
sen misin?
]#



    Boru meta karakterinin kullanımına izin veren uygulamalardan biri de egrep'tir. Burada deneme adında bir dosyaya yazılar yazılmıştır ve içinde ben veya sen katarı bulunan satırlar ekrana yazılmıştır. egrep komutunun uygulandığı ikinci satırda ise b ve s harflerinin ardından en katarı aranmıştır ve bulunan sonuçlar ekrana yazılmıştır.

    '[bs]en' ifadesi '(b|s)en' ifadesi ile aynı anlama gelmektedir. Eğer '(b|s)en' ifadesinde parantez kullanılmazsa 'b' veya 'sen' katarları aranır, ama asıl aranması gereken ifade 'ben' veya 'sen' dir.

    '^Konu','^Kimden' ve '^Tarih' ifadeleri kısaca şu şekilde yazılabilir: '^(Konu|Kimden|Tarih)'.

 

   4.6 Kelimeyi Sınırlamak

    Düzenli ifadeler katarlarla çalıştığı için, sizin oluşturduğunuz ifadelerin katar eşleniğini bulur ve isteğinize göre değiştirir veya ekrana yazdırır. Ama bazı durumlarda ifadelerinizin eşlenikleri başka başka katarlarla bileşik yazılmış olabilir. Mesela arattığınız ifadenin katar eşleniği 'demir' olsun. Bu durumda size 'demirkıran' katarını içeren satırlar da gösterilecektir. Bunu engellemek için '\<' ve '\>' meta karakterleri kullanılır. < veya > karakterleri önüne ters eğri çizgi (backslash) aldıkları zaman meta karaktere dönüşürler.

    '\<deneme' ifadesi kelimenin başı 'deneme' olan katarları 'deneme\>' ifadesi kelime sonunda 'deneme' katarı olan ifadeleri bulur. '\<deneme\>' ifadesi ise içinde sadece 'deneme' katarı kelimelerini bulur

]# cat liste
deneme
deneme123
123deneme
]# egrep '\<deneme' liste
deneme
deneme123
]# egrep 'deneme\>' liste
deneme
123deneme
]# egrep '\<deneme\>' liste
deneme
]#


 

   4.7 İsteğe Bağlı Seçenekler

    '?' işareti isteğe bağlı kullanılabilen bir meta karakterdir. '?' işareti kendinden önce gelen karakterin sıfır veya bir fazla tekrarı anlamına gelir.

]# cat > liste
algoritma
alghoritma
]# egrep 'algorith?ma' liste
algoritma
algorithma
]#

 

    Soru işaretinden önceki 'h'nin sıfır veya bir defa bulunduğu durumlar ekrana yazılmıştır. Bu örnekte sırayla aranan karakterler şu şekildedir: a, l, g, o, r, i, t, h? (h karakterinin sıfır veya bir defa bulunduğu durumlar), m, a.

    Başka bir örnek: '(Oca|Ocak)' şeklinde bir ifade kullanacağımızı varsayalım. Bunun yerine 'Ocak?' ifadesini kullanabiliriz. Soru işareti karakteri sadece kendinden önce gelen karakterler için kullanılmaz. Mesela, (13|13'üncü) ifadesi yerine "13('üncü)?" yazılabilir. Burada parantezler ile gruplandırma yapılmıştır. Ve soru işareti karakteri, kendinden önceki grubun 0 veya 1 defa olma olasılığını arayacaktır.

 

   4.8 Diğer Miktar Belirteçleri:Tekrar Sayıları

    Artı (+) meta karakteri bir veya daha fazla tekrar anlamına gelir. Yıldız (*) meta karakteri sıfır veya daha fazla tekrar anlamına gelir.
]# cat > miktar
13
13'üncü
]# egrep '^ +' miktar (bu ifade miktar dosyasında ki satır başlarında 1 veya daha fazla boşluk olan satırları listeler)
13
] #egrep '^ *' miktar (bu ifade de miktar dosyasında ki satır başlarında 0 veya daha fazla boşluk olan satırları listeler)
13
13'üncü
]#

 

    Başka bir örnek:

]# cat merhaba.html (Varsayalım ki html taglarının arasına yanlışlıkla boşluk koydunuz; sonuçta html sayfanız yanlış görüntülenecektir)
< html>
<head>
</head>
<body>
Regex Ve Linux
</body>
</html>
]# egrep '< *html>' merhaba.html (bu ifade ile yanlış satırları bulmak mümkün olacaktır)
< html>
]#


Meta karakter

Alt Limit

Üst Limit

?

0

1

*

0

sınırsız

+

1

sınırsız

 

   4.9 Özelleştirilmiş Miktar Belirteçleri

    Bu başlığı bir örnek üzerinde açıklayalım. x{1,3} ifadesi x,xx ve de xxx ifadelerine denk gelir.

]# cat > limit.txt (limit.txt dosyası oluşturuluyor ve içine veriler giriliyor)
x
xx
xxx
a
aa
aaa
]# egrep 'x{0,3}' limit.txt (x karakterinin ardı ardına sıfır ve üç (0 ve 3 dahil) arası tekrarı aranıyor)
x
xx
xxx
a
aa
aaa
]# egrep 'x{1,3}' limit.txt (x karakterinin ardı ardına bir ve üç arası(1 ve 3 dahil) tekrarı aranıyor)
x
xx
xxx
]#


   4.10 Parantezler ve Ters Eğri Çizgiler (Backslashes)

    Parantezler, ifadeleri gruplandırmak için kullanılır. Ters eğri çizgiler ise gruplandırılmış ifadelerin saklanması için kullanılır. En fazla 9 tane grup saklayabilirler. Bu bölümdeki regex örnekleri sed üzerinde olacaktır.

]# cat > parantezler.txt
linux ve regex
linux ve unix
unix
]# sed 's/\(linux\)/\1x/g' parantezler.txt
linuxx ve regex
linuxx ve unix
unix
]#
 

    Burada linux ifadesi gruplandırılmış ve 1 ile saklanmıştır.'1x' 'linuxx' değerine eşittir.

 

   4.11 Meta Karakter Aramak

    Eğer arayacağımız katar, meta karakter içeriyorsa ne yapmalıyız? Mesela arayacağımız katar 'www.comu. edu.tr' olsun. Elbette buradaki noktalar meta karakter değildir. Ters eğriler sayesinde 'www\.comu\. edu\.tr' düzenli ifadesi 'www.comu. edu.tr' katarına denktir. Ters eğri çizgiler sadece bu amaçla kullanılmaz; \< \>, \( \) ifadeleri başlı başına meta karakterdir.


5. Tablolar

 

    5.1 Meta Karakter Tablosu

. Herhangi bir tek karakterle uyuşur. 'k.z' ifadesi 'kaz' veya 'kız' ile uyuşur ama kiraz ile uyuşmaz.
$ Satır sonu anlamına gelir. 'öğrenci$' ifadesi 'o bir öğrenci' ifadesi ile uyuşur, ama 'o bir öğrencidir' ifadesi ile uyuşmaz.
^ Satır başı anlamına gelir. '^özgür' ifadesi 'özgür yazılım' ile uyuşur ama 'linux ve özgür yazılım' ile uyuşmaz.
* Kendinden önce gelen karakterin sıfır veya daha fazla tekrarı anlamına gelir. '.*' ifadesi herhangi uzunluktaki bir kelime ile uyuşur.
\ Eğer herhangi bir meta karakter düzenli ifadeler içinde kullanılacaksa önüne '\' getirilir. '\$' ifadesi '$' karakterine karşılık gelir.
[ ]
[x1-x2]
[^x1-x2]
Köşeli parantezin içindeki herhangi bir karakter ile uyuşması anlamına gelir. 's[eo]r' ifadesi 'ser' ve 'sor' ile uyuşur. Köşeli parantez içinde kullanılan tire işareti menzil belirtir. [0-9] herhangi bir rakam anlamına gelir. [A-Za-z] ifadesi herhangi bir büyük harf veya küçük harfle uyuşur. ^ karakteri hariç anlamına gelir. [^123a-z] ifadesi 1,2,3 rakamları ve küçük harfler hariç anlamına gelir.
\< \> \< bir kelimenin başı ,\> ise bir kelimenin sonu anlamına gelir. \< \> ise direk olarak bir kelimeye karşılık gelir.
\( \) İfadeyi gruplandırır. Ayrıca gruplandırılmış ifadelere denk gelen katarları saklar.En fazla 9 katar saklayabilir ve \1 ,\9 gibi gösterilir.
| İki durumun beraber ifade edilmesi durumunda kullanılır. (benim|senin) ifadesi 'bu benim' ve 'bu senin' ifadeleri ile uyuşur. Ama 'bu bize ait' ifadesi ile uyuşmaz.
+ Kendinden önce gelen karakterin bir veya daha fazla tekrarı anlamına gelir. 'x+' ifadesi 'x,xx' ve 'xxx' ifadesi ile uyuşur.
? Kendinden önceki karakterin 0 veya 1 tekrarı anlamına gelir. Not: Bütün dil ve uygulamalarda desteklenmez.
\{ \} Bu ifade bizim belirlediğimiz sayıda tekrar anlamına gelir. A\{3\} ifadesi 'A' harfini takip edecek 3 rakamdan oluşan katar anlamına gelir. Mesela: A123 veya A785 Not: Bu meta karakter bütün dil ve uygulamalar tarafından desteklenmeyebilir.
\{i,j\} Bu ifade bizim belirlediğimiz menzil sayısında tekrar anlamına gelir. [0-9]\{3,5\} ifadesi ardı ardına 3, 4 veya 5 tane gelecek rakamlardan oluşan katarları ifade eder. Not: Bu meta karakter bütün dil ve uygulamalar tarafından desteklenmeyebilir.

 

    5.2 Uyumluluk Tablosu

 

 

.

[]

^

$

\( \)

\{ \}

?

+

|

( )

vi x x x x x          
visual c++ x x x x x          
awk x x x x     x x x x
sed x x x x x x        
Tcl x x x x x   x x x x
ex x x x x x x        
grep x x x x x x        
egrep x x x x x   x x x x
fgrep x x x x x          
perl x x x x x   x x x x



6. SED

 

   6.1 Sed Nedir?

    SED bir stream editörü, düzenleyicidir. Bir akım düzenleyicisi ,dosya yada borudan gelen girdideki temel metin dönüştürmelerini gerçekleştirir. Yani dosya yada standart girdiden metni okur ve bunu kullanıcının istediği biçime dönüştürerek standart çıktıya okur. SED girdi/girdiler üzerinde yalnızca bir kere geçiş yapar;böylece verim artar. Ama SED’in asıl yeteneği bir metni boruya filtre edebilmesidir. Bu da SED’i diğer düzenleyici çeşitlerinden ayırır. SED komut satırı veya bir kabuk programı içinden kullanılabilir.

   6.2 Sed - Verilerin Ara Belleğe Alındığı Yer

    SED üç alandan oluşur : Giriş alanı (input space), Örüntü alanı (patern space) ve Tutma alanı (hold space). Giriş alanı yalnızca bir kez okunur ve atılır. Örüntü alanına giriş alanındaki satırlar okunur ve metin dönüşümleri yapılır.Genel olarak çıktıya burada işlenen metin gönderilir. Tutma alanı ise başlangıçta boştur, bir nevi çalışan ara bellektir.

 

   6.3 Sed Parametreleri

    SED aşağıdaki komut satırı seçeneklerini içerebilir :

'-v'

'--version'

    Çalıştırılan SED’in sürümünü ve telif hakkı bilgilerini yazar.

'-h'

'--help'

    Hata raporu adreslerini ve komut satırı seçeneklerini özetleyen bir kullanıcı mesajı yazar.

'-n'

'--quiet'

'--silent'

    SED’in varsayılan değeri betik içindeki her dönüşün sonuna örüntü alalını yazar. Bu seçenek bu otomatik yazımı kaldırır.(Otomatik yazımı tekrar kullanmak için p komutu kullanılır).

'-e script'

'--expression=script'

script dosyası içerisindeki komutları girdi işlenirken çalıştırılacak olan komutlara ekler.

'-f script-file'

'--file=script-file'

script-file dosyasındaki komutları girdi işlenirken çalıştırılacak olan komutlara ekler.

    Eğer -e,-f ,-expression yada -file seçenekleri verilmemişse komut satırındaki ilk argüman çalıştırılacak olan betik olarak alınır.

    Yukarıdaki işlemlerden sora herhangi komut satırı parametresi kalırsa, bu işlenecek dosyanın adıymış gibi yorumlanır. Bir dosya adı standart giriş akımını temsil etmektedir. Eğer hiç dosya adı belirtilmemişse standart girdi işlenir.

 

   6.4 Sed Programları

    Bir SED programı -e,-f,--expression gibi seçenekleri içeren bir yada daha fazla SED komutundan oluşur. Her SED komutu bir karakterlik komut adı ve özel komut kodu ardından seçili bir adres yada adresler dizisi içerir.

 

   6.5 Sed İle Satır Seçme

    SED betiklerinde adresler aşağıdaki formlardan birisi olabilir :

‘number’

    Girdiden yalnızca satır numarası verilen satırlar seçilir.

‘first~step’

    Satırlar verilen first değerindeki satırdan step değerindeki aralıklarla seçilir.

‘$’

    Bu adres son girdi dosyasın son satırını seçer.

‘/regexp/’

    Regexp düzenli ifadesiyle eşleşen satırları seçer.

‘%regexp%’

    (% yerine başka tek karakter gelebilir) Bu da regexi eşleştirir. Regexde çok “/ ” varsa “/ ” lerin karışmasını önlemek için kullanılır.

‘/regexp/I’ yada ‘ \ %regexp% I’

    “I” niteleyicisi regexin buyuk kucuk harf duyarsiz (case-insensitive) olarak eşlenmesini sağlar.

    Eğer hiç adres verilmezse tüm satırlar seçilir.;eğer bir adres verilmişse sadece o adresle eşleşen satırlar seçilir.

    Adres dizinleri '(,)' ile birbirinden ayrılır. İkinci adres bir regex ise biten eşlemenin kontrolü ilk adresteki seçilmiş satırları izleyen satırlardan başlar. Eğer ikinci adres ilk adresteki satırlardan daha az yada eşit bir numara ise sadece bir satır seçilir.

'!' karakteri bir adres dizini ardından geldiğinde adres dizininde eşlenmeyen satırlar seçilir.Bu ayrıca boş (null) adresler için de çalışır.

   6.6 Komutlar

    SED de bir metni bir başkası içine yerleştirmek mümkündür. Yerleştirme basit yerine koymalardan (küçük_büyük harf) veya çok karmaşık yerine koymalardan(1den itibaren tüm tamsayıların artması) oluşabilir.

    ‘#’ [adreslere izin yok] Bu komut bir sonraki yeni satıra kadar yeni bir yorum açar. Bazı SED uygulamaları yalnızca tek satır yorum yazmayı destekler. Bu uygulamalarda betiğin birçok ilk karakteri “#” ise dikkatli olunmalıdır. Eğer SED betiğinin ilk iki karakteri “ # n” ise -n seçeneği zorunludur. Betiğin ilk satırına “n” ile başlayan bir yorum koymak için ya “N” kullanılmalı yada “n” den önce en az bir boşluk bırakılmalıdır.

    ‘s/regexp/yerleştirilen/flags’ [“/ ” karakteri yerine bir başka tek karakter kullanılabilir.] Bu komutla regexpdeki düzenli ifade yerleştirilen değeri ile yer değiştirir. Regexp yada yerleştirilen ifadelerinde “ / ” (yada kullanılan diğer karakter) yer alacaksa başına “ \ ”konulmalıdır. Yine son yerleşmeye \, & yada yeni satır eklemek için başlarına“ \ ”karakteri konulmalıdır. s komutu aşağıdaki flag/flagleri içerebilir:

‘g’ Yeni yerleştirmeyi tüm satırlara uygular.

‘p’ Yerleştirme gerçekleşmişse yeni örüntü alanını yazar.

‘number’ Sadece numaralanmış eşlemeleri yeniden yerleştirir.

‘w dosya-adı’ Yerleştirme gerçekleşmişse sonuçları dosya adı ile verilen dosyaya yazar.

‘I’ Eşlemeleri durum-duyarsız olarak gerçekleştirir.

‘q’ [En fazla bir adrese izin var] SED’den çıkar.

‘d’ Örüntü alanını siler; yeni bir dönüş başlatır.

‘n’ Otomatik yazım özelliği aktifken örüntü alanını yazar ve girdiye yerleştirir.

‘{komutlar}’ Bir grup komutu tek bir adres eşlemesiyle başlatır.

‘y/kaynak-karakterler/ hedef-karakterler’ S komutu gibi çalışır; ama yalnızca birkaç harf değişimi gerektiğinde kullanılır.

‘a /’

‘text’ [En fazla bir adrese izin var.] Metine ekleme yapar.

‘i’

‘text’ [En fazla bir adrese izin var.] Metni yazar(Sonunda " \ " olan satırları çıktıdan siler.)

‘c / ’

‘text’ Verilen adresteki satırları siler. Örüntü alanı silindikten sonra yeni bir dönüş başlatır.

‘=’ Kullanımda olan girdi satırı numarasını verir.

‘l’ örüntü alanını çapraşık bir formda yazar: yazılamayan karakterler (ve / ) C-tarzı kaçış (C-style escaped) formunda yazılır, uzun satırlar bölünür ve “\” işaretiyle bölük oldukları gösterilir,her satır sonu “$” ile işaretlenir.

‘r dosya adı’ Adı verilen dosyanın içeriğini okur. Eğer okunma izni olmayan bir dosya bu komutla çağrılırsa dosya boş olarak algılanır,hata verilmez.

‘w dosya adı’ Adı verilen dosyaya örüntü alanını yazar.

‘D’ Örüntü alanındaki metni siler.

‘N’ Örüntü alanına yeni bir satır ekler ardından girdideki yeni satırı bu alana ilave eder.

‘P’ Örüntü alanının ilk satırını yazar.

‘h’ Tutma alanının içeriğini örüntü alanını içeriğiyle değiştirir.

‘H’ Tutma alanına yeni satır ekler ardından örüntü alanının içeriğini bu alana ilave eder.

‘g’ Örüntü alanının içeriğini tutma alanı içeriğiyle değiştirir.

‘G’ Örüntü alanına yeni satır ekler ardından tutma alanın içeriğini ilave eder.

‘x’ Tutma ve örüntü alanı içeriklerini değiştirir.

‘: label’ [Adrese izin yok.] b ve t komutları için bir etiket belirler.

‘b label’ Etiketler koşulsuz dallanır.

‘t label’ Etiketler, yerleştirme başarılıysa dallanır.

   6.7 Basit Sed Örnekleri

/ ./!b  eğer boş satırsa bir sonrakini okur.

s/!/!!/g  tüm “!” ler “!!” ile yer değiştirir.

s/^/!/g  satır başına ! ekler.

s/$/!/g  satır sonuna ! ekler.


7. Regex'in Sed Uygulaması

 

]$ cat ornek1.txt
redhat üstünde
kde pencere yöneticisi
]$ sed -e 's/redhat/suse/g' -e 's/kde/gnome/g' ornek1.txt
suse üstünde
gnome pencere yöneticisi

 

s/ \/usr\/bin/\/bin/g dosya > yeni_dosya

]$ cat ornek4.txt
017 naciye uzun
]$ sed 's/\( [A-Za-z] [A-Za-z]* \) \( [A-Za-z] [A-Za-z]*\) \( [0-9]*\) / \1 \3 \2/' deneme_dosya
uzun 017 naciye
 

sed '5,15s/bonito chica/guapo chico/g' 

 

sed '/^regex/s/regular expression/düzenli ifadeler/g' dosya_adı 

]$ find /mnt/cdrom -name *.mp3
/mnt/cdrom/duman/1.mp3
/mnt/cdrom/duman/2.mp3
Eğer biz sadece mp3 dosyalarını görüntületmek isteseydik yani bulunduğu dizini göstermeksizin listeletmek isteseydik aşağıdaki komutu kullanmalıydık.
]$ find /mnt/cdrom  -name *.mp3 | sed 's/.*\///g'
1.mp3
2.mp3

Bu komutla find komutuyla ortaya çıkan veriler boru işlemi ile sed uygulamasının girdisi olarak kullanılmıştır. Sed '/' karakterini ve de ondan önceki karakteri yok ederek çıktıyı vermiştir. \ karakteri normalde metakarakter olan / karakterini normal bir karakter yapmak için kullanılmıştır.

]$ echo ikisatir | sed 's/iki/& yeni\>/'
iki yeni
satir
 
]$ cat ornek9.txt
1  2      3   4 5                 6  7
8            9   2                  3    elma
]$ sed 's/  */,/g' ornek1.txt
1,2,3,4,5,6,7
8,9,2,3,elma


]$ cat ornek10.txt
necati demir
naciye uzun
]$ cat sed.scr
s/^/!/
s/\(.*\)\(.\)/\2\1/
:a
s/\(.*\)!\(.*\)\(.\)/\1\3!\2/
ta
s/!//
]$ sed -f sed.scr ornek10.txt
rimed itacen
nuzu eyican

]$ cat ornek11.txt
100,210,354,462
331,746,50
90,263,47,14
]$ cat sed11.sed
:a
s/\([0-9]*\),\(.*\)/\1\
\2/
ta
]$ sed -f sed11.sed ornek11.txt
100
210
354
462
331
746
50
90
263
47
14
 
]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:08:A1:2C:2D:29
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:168 (168.0 b)
          Interrupt:10 Base address:0xd800

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1007 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1007 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:61606 (60.1 Kb)  TX bytes:61606 (60.1 Kb)

]$ ifconfig|sed '1,16s/  *inet addr:\([0-9]\{1,3\}\).\([0-9]\{1,3\}\).\([0-9]\{1,3\}\).\([0-9]\{1,3\}\) .*/\1.\2.\3.\4/'|sed '1s/.*/eth0/'|sed '3,9s/.*//'|sed '10s/.*/lo/'|sed '12,16s/.*//'
eth0
192.168.0.1

lo
127.0.0.1
 

9. Kaynaklar

Mastering Regular Expressions by Jeffrey E.F. Friedl
http://sitescooper.org/tao_regexps.htm
http://www.opengroup.org