Akış Düzenleyici - Döngüler

Diğer programlama dilleri gibi, SED de yürütme akışını kontrol etmek için bir döngü ve dallanma olanağı sağlar. Bu bölümde, SED'de döngülerin ve dalların nasıl kullanılacağı hakkında daha fazlasını keşfedeceğiz.

SED'deki bir döngü, bir gotoBeyan. SED, etiketin işaretlediği satıra atlayabilir ve kalan komutları uygulamaya devam edebilir. SED'de bir tanımlayabilirizlabel aşağıdaki gibi:

:label 
:start 
:end 
:up

Yukarıdaki örnekte, iki nokta üst üste (:) sonrasındaki bir ad etiket adını ifade eder.

Belirli bir etikete atlamak için, bkomutu ve ardından etiket adı. Etiket adı atlanırsa, SED, SED dosyasının sonuna atlar.

Döngüleri ve dalları anlamak için basit bir SED betiği yazalım. Books.txt dosyamızda, kitap başlıklarının ve yazarlarının birkaç girişi vardır. Aşağıdaki örnek, bir kitap başlığını ve yazar adını virgülle ayrılmış bir satırda birleştirir. Ardından "Paulo" kalıbını arar. Desen eşleşirse, satırın önüne bir tire (-) yazdırır, aksi takdirdePrint satırı yazdıran etiket.

[jerry]$ sed -n ' 
h;n;H;x 
s/\n/, / 
/Paulo/!b Print 
s/^/- / 
:Print 
p' books.txt

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

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
- The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
- The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin

İlk bakışta, yukarıdaki komut dosyası şifreli görünebilir. Bunu açıklığa kavuşturalım.

  • İlk iki komut kendinden açıklamalıdır h;n;H;x ve s/\n/, / kitap başlığını ve yazarını virgülle (,) ayırarak birleştirin.

  • Üçüncü komut etikete atlar Print yalnızca model eşleşmediğinde, aksi takdirde değiştirme dördüncü komutla gerçekleştirilir.

  • :Print sadece bir etiket adıdır ve zaten bildiğiniz gibi p yazdırma komutudur.

Okunabilirliği artırmak için her SED komutu ayrı bir satıra yerleştirilir. Ancak, aşağıdaki gibi tüm komutları tek bir satıra yerleştirmeyi seçebilirsiniz:

[jerry]$ sed -n 'h;n;H;x;s/\n/, /;/Paulo/!b Print; s/^/- /; :Print;p' books.txt

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

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
- The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
- The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin