Akış Düzenleyici - Kalıp Arabelleği

Herhangi bir dosya üzerinde gerçekleştirdiğimiz temel işlemlerden biri, içeriğini görüntülemektir. Bu amaçla kullanabilirizprintdesen arabelleğinin içeriğini yazdıran komut. Öyleyse şablon tamponu hakkında daha fazla bilgi edinelim

Önce satır numarasını, kitabın adını, yazarını ve sayfa sayısını içeren bir dosya oluşturun. Bu eğitimde bu dosyayı kullanacağız. Size kolaylık sağlayacak şekilde herhangi bir metin dosyasını kullanabilirsiniz. Metin dosyamız şöyle görünecek:

[jerry]$ vi books.txt 
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
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

Şimdi dosya içeriğini yazdıralım.

[jerry]$ sed 'p' books.txt

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

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

Her satırın neden iki kez görüntülendiğini merak edebilirsiniz. Hadi bulalım.

SED'nin iş akışını hatırlıyor musunuz? Varsayılan olarak SED, model ara belleğinin içeriğini yazdırır. Ek olarak, komut bölümümüze açıkça bir yazdırma komutu ekledik. Dolayısıyla her satır iki kez yazdırılır. Ama endişelenme. SED,-ndesen tamponunun varsayılan yazdırmasını bastırma seçeneği. Aşağıdaki komut bunu göstermektedir.

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

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
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

Tebrikler! beklenen sonucu aldık. Varsayılan olarak, SED tüm hatlarda çalışır. Ancak SED'yi yalnızca belirli hatlarda çalışmaya zorlayabiliriz. Örneğin aşağıdaki örnekte, SED yalnızca 3. hatta çalışır. Bu örnekte, SED komutundan önce bir adres aralığı belirledik.

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

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

3) The Alchemist, Paulo Coelho, 197

Ek olarak, SED'ye yalnızca belirli satırları yazdırması talimatını da verebiliriz. Örneğin, aşağıdaki kod 2'den 5'e kadar tüm satırları yazdırır. Burada adres aralığını belirtmek için virgül (,) operatörünü kullandık.

[jerry]$ sed -n '2,5 p' books.txt

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288

Dosyanın son satırını temsil eden özel bir karakter Dolar ($) da vardır. Öyleyse dosyanın son satırını yazdıralım.

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

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

6) A Game of Thrones, George R. R. Martin, 864

Bununla birlikte, adres aralığını belirtmek için Dolar ($) karakterini de kullanabiliriz. Aşağıdaki örnek 3. satırdan son satıra kadar yazdırır.

[jerry]$ sed -n '3,$ p' books.txt

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

3) The Alchemist, Paulo Coelho, 197 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

Virgül (,) operatörünü kullanarak bir adres aralığını nasıl belirteceğimizi öğrendik. SED, adres aralığını belirtmek için kullanılabilecek iki operatörü daha destekler. İlki artı (+) operatörüdür ve virgül (,) operatörü ile kullanılabilir. ÖrneğinM, +n bir sonrakini yazdıracak n satır numarasından başlayan çizgiler M. Kafa karıştırıcı geliyor mu? Basit bir örnekle kontrol edelim. Aşağıdaki örnek, 2 numaralı satırdan başlayarak sonraki 4 satırı yazdırır.

[jerry]$ sed -n '2,+4 p' books.txt

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
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

İsteğe bağlı olarak, tilde (~) operatörünü kullanarak adres aralığını da belirleyebiliriz. KullanırM~nform. SED'in M satır numarasından başlaması ve her n (inci) satırda işlem yapması gerektiğini belirtir. Örneğin,50~550, 55, 60, 65 vb. satırlarla eşleşir. Dosyadan sadece tek satırları yazdıralım.

[jerry]$ sed -n '1~2 p' books.txt

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

1) A Storm of Swords, George R. R. Martin, 1216 
3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Aşağıdaki kod, dosyadan yalnızca çift satırları yazdırır.

[jerry]$ sed -n '2~2 p' books.txt

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verecektir.

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864