Akış Düzenleyici - Özel Karakterler

SED, komut olarak değerlendirilen iki özel karakter sağlar. Bu bölüm, bu iki özel karakterin kullanımını göstermektedir.

= Komut

"=" Komutu satır numaraları ile ilgilenir. Aşağıda "=" komutunun sözdizimi verilmiştir:

[/pattern/]= 
[address1[,address2]]=

= Komutu satır numarasını ve ardından içeriğini standart çıktı akışına yazar. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ sed '=' books.txt

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

1 
1) A Storm of Swords, George R. R. Martin, 1216 
2 
2) The Two Towers, J. R. R. Tolkien, 352 
3 
3) The Alchemist, Paulo Coelho, 197 
4 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5 
5) The Pilgrimage, Paulo Coelho, 288 
6 
6) A Game of Thrones, George R. R. Martin, 864

İlk dört satırın satır numaralarını ve içeriğini yazdıralım. Aşağıdaki komut, ilk dört satırı satır numaralarıyla ve kalan satır numarası olmadan yazdırır.

[jerry]$ sed '1, 4=' books.txt

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

1 
1) A Storm of Swords, George R. R. Martin, 1216 
2 
2) The Two Towers, J. R. R. Tolkien, 352 
3 
3) The Alchemist, Paulo Coelho, 197 
4 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Ek olarak, SED'ye bir desen eşleşmesi başarılı olduğunda satır numaralarını yazdırması talimatını verebiliriz. Aşağıdaki örnek, "Paulo" desenini içeren satır numarasını yazdırır.

[jerry]$ sed '/Paulo/ =' books.txt

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

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Aşağıdaki SED komutunun ne yaptığını tahmin edebilir misiniz?

[jerry]$ sed -n '$ =' books.txt

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

6

Evet haklısın. Dosyada bulunan toplam satır sayısını sayar. Kodu aydınlatalım. Komut bölümünde, son satırın satır numarasını ve ardından içeriğini yazdıran "$ =" kullandık. Ama biz de sağladık-n desen tamponunun varsayılan yazdırmasını engelleyen bayrak. Bu nedenle, yalnızca son satır numarası görüntülenir.

& Komut

SED, & özel karakterini destekler. Bir kalıp eşleşmesi başarılı olduğunda, bu özel karakter eşleşen kalıbı depolar. Genellikle ikame komutuyla birlikte kullanılır. Bu verimli özelliği nasıl kullanabileceğimizi görelim.

Book.txt dosyasındaki her satır numaralandırılmıştır. Kelimeleri ekleyelimBook numberher satırın başında. Aşağıdaki örnek bunu göstermektedir.

[jerry]$ sed 's/[[:digit:]]/Book number &/' books.txt

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

Book number 1) A Storm of Swords, George R. R. Martin, 1216 
Book number 2) The Two Towers, J. R. R. Tolkien, 352 
Book number 3) The Alchemist, Paulo Coelho, 197 
Book number 4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Book number 5) The Pilgrimage, Paulo Coelho, 288 
Book number 6) A Game of Thrones, George R. R. Martin, 864

Bu örnek çok basit. İlk olarak, satır numarası olan bir basamağın ilk oluşumunu ararız (bu nedenle [[: digit:]] kullandık) ve SED eşleşen modeli otomatik olarak & özel karakterinde saklar. İkinci adımda kelimeleri ekliyoruzBook number her eşleşen modelden önce, yani her satırdan önce.

Başka bir örnek alalım. Book.txt dosyasında, son rakam kitabın sayfa sayısını ifade eder. Bundan önce "Sayfalar =" ekleyelim. Bunu yapmak için, basamağın son geçtiği yeri bulun ve onu "Sayfalar = &" ile değiştirin. Burada & eşleşen kalıbı, yani sayfa sayısını saklar

[jerry]$ sed 's/[[:digit:]]*$/Pages = &/' books.txt

Yukarıdaki sözdizimini yürütürken aşağıdaki sonucu alırsınız:

1) A Storm of Swords, George R. R. Martin, Pages = 1216 
2) The Two Towers, J. R. R. Tolkien, Pages = 352 
3) The Alchemist, Paulo Coelho, Pages = 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, Pages = 432 
5) The Pilgrimage, Paulo Coelho,Pages = 288 
6) A Game of Thrones, George R. R. Martin, Pages = 864

Şimdilik, sadece şunu hatırla [[:digit:]]*$rakamın son geçtiği yeri bulur. "Normal İfadeler bölümünde, normal ifadeler hakkında daha çok şey keşfedeceğiz.