Akış Düzenleyici - Normal İfadeler

SED'yi güçlü ve verimli kılan normal ifadelerdir. Düzenli ifadelerle bir dizi karmaşık görev çözülebilir. Her komut satırı uzmanı, normal ifadelerin gücünü bilir.

Diğer birçok GNU / Linux yardımcı programı gibi, SED de düzenli ifadeleri destekler ve bunlara genellikle regex. Bu bölümde normal ifadeler ayrıntılı olarak açıklanmaktadır. Bu bölüm üç bölüme ayrılmıştır: Standart normal ifadeler, normal ifadelerin POSIX sınıfları ve Meta karakterler.

Standart Normal İfadeler

Satırın başlangıcı (^)

Normal ifadeler terminolojisinde, düzeltme işareti (^) sembolü bir satırın başıyla eşleşir. Aşağıdaki örnek, "The" deseniyle başlayan tüm satırları yazdırır.

[jerry]$ sed -n '/^The/ p' books.txt

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho

Satır Sonu ($)

Satırın sonu dolar ($) sembolü ile temsil edilir. Aşağıdaki örnek, "Coelho" ile biten satırları yazdırır.

[jerry]$ sed -n '/Coelho$/ p' books.txt

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

The Alchemist, Paulo Coelho 
The Pilgrimage, Paulo Coelho

Tek Karakter (.)

Nokta (.), Satır sonu karakteri dışında herhangi bir tek karakterle eşleşir. Aşağıdaki örnek, "t" karakteriyle biten üç harfli kelimelerin tümünü yazdırır.

[jerry]$ echo -e "cat\nbat\nrat\nmat\nbatting\nrats\nmats" | sed -n '/^..t$/p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

cat 
bat 
rat 
mat

Karakter Kümesini Eşleştir ([])

Normal ifade terminolojisinde, bir karakter seti köşeli parantezler ([]) ile temsil edilir. Birkaç karakterden yalnızca birini eşleştirmek için kullanılır. Aşağıdaki örnek, "Çağrı" ve "Uzun" kalıplarıyla eşleşir ancak "Top" ile eşleşmez.

[jerry]$ echo -e "Call\nTall\nBall" | sed -n '/[CT]all/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Call 
Tall

Özel Set ([^])

Özel kümede, düzeltme işareti, köşeli parantez içindeki karakter kümesini geçersiz kılar. Aşağıdaki örnek yalnızca "Ball" yazdırır.

[jerry]$ echo -e "Call\nTall\nBall" | sed -n '/[^CT]all/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Ball

Karakter Aralığı ([-])

Bir karakter aralığı sağlandığında, normal ifade köşeli parantez içinde belirtilen aralıktaki herhangi bir karakterle eşleşir. Aşağıdaki örnek, "Ara" ve "Uzun" ile eşleşir ancak "Top" ile eşleşmez.

[jerry]$ echo -e "Call\nTall\nBall" | sed -n '/[C-Z]all/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Call 
Tall

Şimdi aralığı "AP" olarak değiştirelim ve sonucu gözlemleyelim.

[jerry]$ echo -e "Call\nTall\nBall" | sed -n '/[A-P]all/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Call 
Ball

Bir Durumda Sıfır (\?)

SED'de soru işareti (\?), Sıfır veya önceki karakterin bir oluşumuyla eşleşir. Aşağıdaki örnek, "Davranış" ile "Davranış" ile eşleşmektedir. Burada "\?" Kullanarak isteğe bağlı karakter olarak "u" yaptık.

[jerry]$ echo -e "Behaviour\nBehavior" | sed -n '/Behaviou\?r/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Behaviour 
Behavior

Bir veya Daha Fazla Durum (\ +)

SED'de artı simgesi (\ +), önceki karakterin bir veya daha fazla oluşumuyla eşleşir. Aşağıdaki örnek, "2" nin bir veya daha fazla oluşumuyla eşleşmektedir.

[jerry]$ echo -e "111\n22\n123\n234\n456\n222"  | sed -n '/2\+/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

22 
123 
234 
222

Sıfır veya Daha Fazla Oluşum (*)

Yıldız işaretleri (*), önceki karakterin sıfır veya daha fazla oluşumuyla eşleşir. Aşağıdaki örnek, "ca", "cat", "catt" vb. İle eşleşir.

[jerry]$ echo -e "ca\ncat" | sed -n '/cat*/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

ca 
cat

Tam Olarak N Oluşum {n}

{n}, önceki karakterin "n" oluşumuyla tam olarak eşleşir. Aşağıdaki örnek yalnızca üç basamaklı sayıları yazdırır. Ancak ondan önce, yalnızca sayıları içeren aşağıdaki dosyayı oluşturmanız gerekir.

[jerry]$ cat numbers.txt

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

1 
10 
100 
1000 
10000 
100000 
1000000 
10000000 
100000000 
1000000000

SED ifadesini yazalım.

[jerry]$ sed -n '/^[0-9]\{3\}$/ p' numbers.txt

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

100

Küme parantezi çiftinin çıkışında "\" karakteri bulunduğunu unutmayın.

En az n Oluşum {n,}

{n,}, önceki karakterin en az "n" oluşumuyla eşleşir. Aşağıdaki örnek, beş basamağa eşit veya büyük olan tüm sayıları yazdırır.

[jerry]$ sed -n '/^[0-9]\{5,\}$/ p' numbers.txt

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

10000 
100000 
1000000
10000000 
100000000 
1000000000

M - N Oluşum {m, n}

{m, n}, önceki karakterin en az "m" ve en fazla "n" oluşumuyla eşleşir. Aşağıdaki örnek, en az beş basamaklı ancak sekizden fazla olmayan tüm sayıları yazdırır.

[jerry]$ sed -n '/^[0-9]\{5,8\}$/ p' numbers.txt

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

10000 
100000 
1000000 
10000000

Boru (|)

SED'de dikey çizgi karakteri mantıksal OR işlemi gibi davranır. Borunun her iki tarafındaki öğelerle eşleşir. Aşağıdaki örnek, "str1" veya "str3" ile eşleşir.

[jerry]$ echo -e "str1\nstr2\nstr3\nstr4" | sed -n '/str\(1\|3\)/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

str1 
str3

Parantez ve dikey çizgi (|) çiftinin "\" karakteriyle kaçtığına dikkat edin.

Kaçan Karakterler

Bazı özel karakterler var. Örneğin, satırsonu "\ n" ile temsil edilir, satır başı "\ r" ile temsil edilir, vb. Bu karakterleri normal ASCII bağlamında kullanmak için geriye eğik çizgi (\) karakterini kullanarak onlardan çıkış yapmalıyız. Bu bölüm, özel karakterlerin kaçışını gösterir.

"\" Karakterinden çıkış

Aşağıdaki örnek "\" kalıbıyla eşleşmektedir.

[jerry]$ echo 'str1\str2' | sed -n '/\\/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

str1\str2

Çıkış "\ n"

Aşağıdaki örnek, yeni satır karakteriyle eşleşmektedir.

[jerry]$ echo 'str1\nstr2' | sed -n '/\\n/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

str1\nstr2

"\ R" karakterinden çıkış

Aşağıdaki örnek, satır başı ile eşleşir.

[jerry]$ echo 'str1\rstr2' | sed -n '/\\r/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

str1\rstr2

"\ Dnnn" den kaçış

Bu, ondalık ASCII değeri "nnn" olan bir karakterle eşleşir. Aşağıdaki örnek yalnızca "a" karakteriyle eşleşir.

[jerry]$ echo -e "a\nb\nc" | sed -n '/\d97/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

a

"\ Onnn" karakterinden çıkış

Bu, sekizlik ASCII değeri "nnn" olan bir karakterle eşleşir. Aşağıdaki örnek yalnızca "b" karakteriyle eşleşmektedir.

[jerry]$ echo -e "a\nb\nc" | sed -n '/\o142/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

b

Bu, onaltılık ASCII değeri "nnn" olan bir karakterle eşleşir. Aşağıdaki örnek yalnızca "c" karakteriyle eşleşir.

[jerry]$ echo -e "a\nb\nc" | sed -n '/\x63/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

c

Normal İfadelerin POSIX Sınıfları

Özel anlamı olan bazı ayrılmış sözcükler vardır. Bu ayrılmış sözcükler, normal ifadenin POSIX sınıfları olarak adlandırılır. Bu bölüm SED tarafından desteklenen POSIX sınıflarını açıklamaktadır.

[: alnum:]

Alfabetik ve sayısal karakterleri ifade eder. Aşağıdaki örnek yalnızca "Bir" ve "123" ile eşleşir ancak sekme karakteriyle eşleşmez.

[jerry]$ echo -e "One\n123\n\t" | sed -n '/[[:alnum:]]/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

One 
123

[:alfa:]

Yalnızca alfabetik karakterleri ima eder. Aşağıdaki örnek yalnızca "Bir" kelimesiyle eşleşmektedir.

[jerry]$ echo -e "One\n123\n\t" | sed -n '/[[:alpha:]]/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

One

[:boş:]

Boşluk veya sekme olabilen boş karakter anlamına gelir. Aşağıdaki örnek yalnızca sekme karakteriyle eşleşir.

[jerry]$ echo -e "One\n123\n\t" | sed -n '/[[:space:]]/ p' | cat -vte

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

^I$

"Cat -vte" komutunun sekme karakterlerini (^ I) göstermek için kullanıldığına dikkat edin.

[:hane:]

Yalnızca ondalık sayıları ifade eder. Aşağıdaki örnek yalnızca "123" rakamıyla eşleşmektedir.

[jerry]$ echo -e "abc\n123\n\t" | sed -n '/[[:digit:]]/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

123

[: alt:]

Yalnızca küçük harfleri ifade eder. Aşağıdaki örnek yalnızca "bir" ile eşleşmektedir.

[jerry]$ echo -e "one\nTWO\n\t" | sed -n '/[[:lower:]]/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

one

[:üst:]

Yalnızca büyük harfleri ifade eder. Aşağıdaki örnek yalnızca "TWO" ile eşleşmektedir.

[jerry]$ echo -e "one\nTWO\n\t" | sed -n '/[[:upper:]]/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

TWO

[: nokta:]

Boşluk olmayan veya alfanümerik karakterler içeren noktalama işaretlerini ifade eder

[jerry]$ echo -e "One,Two\nThree\nFour" | sed -n '/[[:punct:]]/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

One,Two

[:Uzay:]

Boşluk karakterlerini ifade eder. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ echo -e "One\n123\f\t" | sed -n '/[[:space:]]/ p' | cat -vte

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

123^L^I$

Metakarakterler

Geleneksel normal ifadeler gibi, SED de meta karakterleri destekler. Bunlar Perl tarzı düzenli ifadelerdir. Metakarakter desteğinin GNU SED'e özgü olduğunu ve diğer SED varyantlarıyla çalışmayabileceğini unutmayın. Metakarakterleri ayrıntılı olarak tartışalım.

Kelime Sınırı (\ b)

Normal ifade terminolojisinde "\ b", kelime sınırıyla eşleşir. Örneğin, "\ b", "ile" eşleşir, ancak "bunlar", "orada", "onlar", "sonra" vb. İle eşleşmez. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ echo -e "these\nthe\nthey\nthen" | sed -n '/\bthe\b/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

the

Sözcük Olmayan Sınır (\ B)

Normal ifade terminolojisinde "\ B", kelime olmayan sınırla eşleşir. Örneğin, "\ B" "bunlar" ve "onlar" ile eşleşir ancak "the" ile eşleşmez. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ echo -e "these\nthe\nthey" | sed -n '/the\B/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

these 
they

Tek Boşluk (\ s)

SED'de "\ s", tek bir boşluk karakteri anlamına gelir. Aşağıdaki örnek "Satır \ t1" ile eşleşir ancak "Satır1" ile eşleşmez.

[jerry]$ echo -e "Line\t1\nLine2" | sed -n '/Line\s/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Line 1

Tek Boşluk Dışı (\ S)

SED'de "\ S", tek boşluk karakterini ifade eder. Aşağıdaki örnek "Satır2" ile eşleşir ancak "Satır \ t1" ile eşleşmez.

[jerry]$ echo -e "Line\t1\nLine2" | sed -n '/Line\S/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

Line2

Tek Sözcük Karakteri (\ w)

SED'de "\ w", tek kelimelik karakter, yani alfabetik karakterler, rakamlar ve alt çizgi (_) anlamına gelir. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ echo -e "One\n123\n1_2\n&;#" | sed -n '/\w/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

One 
123 
1_2

Tek Sözcük Olmayan Karakter (\ W)

SED'de "\ W", "\ w" nin tam tersi olan tek sözcük olmayan karakteri ifade eder. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ echo -e "One\n123\n1_2\n&;#" | sed -n '/\W/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

&;#

Desen Boşluğunun Başlangıcı (\ `)

SED'de "\" "desen uzayının başlangıcını ifade eder. Aşağıdaki örnek yalnızca "Bir" kelimesiyle eşleşmektedir.

[jerry]$ echo -e "One\nTwo One" | sed -n '/\`One/ p'

Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:

One