Akış Düzenleyici - Temel Komutlar
Bu bölüm birkaç kullanışlı SED komutunu açıklamaktadır.
Komutu Sil
SED, metni işlemek için çeşitli komutlar sağlar. Önce şunu keşfedelim:deletekomut. Silme komutunu şu şekilde uygulayabilirsiniz:
[address1[,address2]]d
address1 ve address2sırasıyla başlangıç ve bitiş adresleridir, bunlar satır numaraları veya desen dizileri olabilir. Bu adreslerin her ikisi de isteğe bağlı parametrelerdir.
İsminden de anlaşılacağı üzere silme komutu, silme işlemini gerçekleştirmek için kullanılır ve SED on line çalıştığı için bu komutun satırları silmek için kullanıldığını söyleyebiliriz. Sil komutunun satırları yalnızca desen arabelleğinden kaldırdığını unutmayın; satır çıkış akışına gönderilmez ve orijinal dosya değişmeden kalır. Aşağıdaki örnek bu noktayı göstermektedir.
[jerry]$ sed 'd' books.txt
Ama çıktı nerede? Hat adresi sağlanmadıysa, SED varsayılan olarak her satırda çalışır. Bu nedenle, tüm satırları desen arabelleğinden siler. Komutun standart çıktıya hiçbir şey yazdırmamasının nedeni budur.
SED'ye sadece belirli hatlarda çalışması talimatını verelim. Aşağıdaki örnek yalnızca 4. satırı kaldırır.
[jerry]$ sed '4d' 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) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Ek olarak SED, virgül (,) kullanarak adres aralığını da kabul eder. SED'e N1'den N2'ye hatları kaldırması talimatını verebiliriz. Örneğin, aşağıdaki örnek 2'den 4'e kadar olan tüm satırları siler.
[jerry]$ sed '2, 4 d' 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
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
SED'in adres aralığı sadece sayılarla sınırlı değildir. Kalıpları bir adres olarak da belirleyebiliriz. Aşağıdaki örnek, yazar Paulo Coelho'nun tüm kitaplarını kaldırmaktadır.
[jerry]$ sed '/Paulo Coelho/d' 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
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864
Metinsel kalıp kullanarak bir adres aralığı da belirleyebiliriz. Aşağıdaki örnek, desenler arasındaki tüm çizgileri kaldırırStorm ve Fellowship.
[jerry]$ sed '/Storm/,/Fellowship/d' books.txt
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Buna ek olarak, SED ile dolar ($), artı (+) ve tilde (~) operatörlerini de kullanabiliriz.
Komut Yaz
Herhangi bir dosya üzerinde gerçekleştirdiğimiz önemli işlemlerden biri yedeklemedir, yani dosyanın başka bir kopyasını oluştururuz. SED,writemodel arabelleğinin içeriğini bir dosyada saklama komutu. Aşağıda verilen sözdizimiwrite benzer komut delete komut.
[address1[,address2]]w file
Buraya, address1 ve address2sırasıyla başlangıç ve bitiş adresleridir, bunlar satır numaraları veya desen dizileri olabilir. Bu adreslerin her ikisi de isteğe bağlı parametrelerdir.
Yukarıdaki sözdiziminde, w yazma komutunu ifade eder ve fileiçeriği sakladığınız dosya adıdır. Dikkatli olfileparametre. Bir dosya adı verildiğinde, SED mevcut değilse anında bir dosya oluşturur ve zaten mevcutsa bunun üzerine yazar.
SED kullanarak dosyanın tam bir kopyasını yapalım. Arasında tam olarak bir boşluk olması gerektiğini unutmayınw ve file.
[jerry]$ sed -n 'w books.bak' books.txt
Adlı başka bir dosya oluşturduk books.bak. Şimdi her iki dosyanın da aynı içeriğe sahip olduğunu doğrulayın.
[jerry]$ diff books.txt books.bak
[jerry]$ echo $?
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
0
Varsayabilirsiniz: cpcommand tam olarak aynı şeyi yapar. Evet! cpkomutu da aynı şeyi yapar, ancak SED olgunlaşmış bir yardımcı programdır. Kaynak dosyadan yalnızca belirli satırları içeren bir dosya oluşturmaya izin verir. Başka bir dosyada sadece çift satırları saklayalım.
[jerry]$ sed -n '2~2 w junk.txt' books.txt
[jerry]$ cat junk.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
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
Ayrıca yazma komutuyla virgül (,), dolar ($) ve artı (+) operatörlerini de kullanabilirsiniz.
Buna ek olarak, SED ayrıca yazma komutuyla desen eşleştirmeyi de destekler. Tek tek yazarların tüm kitaplarını ayrı bir dosyada saklamak istediğinizi varsayalım. Sıkıcı ve uzun yollardan biri bunu elle yapmaktır ve daha akıllıca yolu SED kullanmaktır.
[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w
Tolkien.txt' books.txt
Yukarıdaki örnekte, her satırı bir modelle eşleştiriyoruz ve eşleşen çizgiyi belirli bir dosyada saklıyoruz. O çok basit. Birden fazla komut belirtmek için kullandık-eSED komutunun anahtarı. Şimdi her dosyanın ne içerdiğini görelim:
[jerry]$ cat Martin.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
6) A Game of Thrones, George R. R. Martin, 864
Dosya içeriğini gösterelim.
[jerry]$ cat Paulo.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
Dosya içeriğini gösterelim.
[jerry]$ cat Tolkien.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
Mükemmel! Beklenen sonucu aldık. SED gerçekten harika bir yardımcı programdır.
Komut Ekle
Herhangi bir metin düzenleyicinin en kullanışlı işlemlerinden biri, ekleme işlevselliği sağlamaktır. SED, bu işlemi append komutuyla destekler. Ekleme sözdizimi aşağıda verilmiştir:
[address]a\
Append text
4. satırdan sonra yeni bir kitap girişi ekleyelim. Aşağıdaki örnek bunun nasıl yapılacağını göstermektedir
[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' 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) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
7) Adultry, Paulo Coelho, 234
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Komut bölümünde, 4 satır numarasını ima eder, a ekleme komutu ve kalan kısım eklenecek metindir.
Dosyanın sonuna bir metin satırı ekleyelim. Bunu yapmak için kullanın$adres olarak. Aşağıdaki örnek bunu göstermektedir:
[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' 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) 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
7) Adultry, Paulo Coelho, 234
Satır numarasının yanı sıra, metinsel desen kullanarak da bir adres belirleyebiliriz. Örneğin, aşağıdaki örnek, dizeyle eşleştikten sonra metni eklerThe Alchemist.
[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' 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) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 234
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
Eşleşen birden fazla desen varsa, metnin her eşleşmeden sonra eklendiğini unutmayın. Aşağıdaki örnek bu senaryoyu göstermektedir.
[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' 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
7) Adultry, Paulo Coelho, 234
3) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 234
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
7) Adultry, Paulo Coelho, 234
5) The Pilgrimage, Paulo Coelho, 288
7) Adultry, Paulo Coelho, 234
6) A Game of Thrones, George R. R. Martin, 864
Komutu Değiştir
SED sağlar change veya replacec ile temsil edilen komut. Bu komut, mevcut bir satırı yeni metinle değiştirmeye yardımcı olur. Satır aralığı sağlandığında, tüm satırlar bir grup olarak tek bir metin satırıyla değiştirilir. Aşağıda, değiştirme komutunun sözdizimi verilmiştir:
[address1[,address2]]c\
Replace text
Üçüncü satırı başka bir metinle değiştirelim.
[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324
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
SED ayrıca desenleri bir adres olarak kabul eder. Aşağıdaki örnekte, desen eşleşmesi başarılı olduğunda bir satır değiştirilir.
[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324
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
SED ayrıca birden fazla hattın tek bir hatla değiştirilmesine izin verir. Aşağıdaki örnek, dördüncü ile altıncı arasındaki satırları kaldırır ve bunları yeni metinle değiştirir.
[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' 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) The Alchemist, Paulo Coelho, 197
4) Adultry, Paulo Coelho, 324
Komut Ekle
İnsert komutu, append ile aynı şekilde çalışır. Tek fark, belirli bir konumdan önce bir satır eklemesidir. Aşağıda, insert komutunun sözdizimi verilmiştir:
[address]i\
Insert text
Ekleme komutunu bazı örneklerle anlayalım. Aşağıdaki komut, dördüncü satırdan önce yeni bir giriş ekler.
[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' 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) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 324
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
Yukarıdaki örnekte, 4 konum numarası, i insert komutunu belirtir ve kalan kısım eklenecek metindir.
Bir dosyanın başlangıcına metin eklemek için, satır adresini şu şekilde girin: 1. Aşağıdaki komut bunu göstermektedir:
[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
7) Adultry, Paulo Coelho, 324
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
Ek olarak, birden çok satır ekleyebiliriz. Aşağıdaki komut, son satırdan önce iki satır ekler.
[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
8) Eleven Minutes, Paulo Coelho, 304' 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
7) Adultry, Paulo Coelho, 324
8) Eleven Minutes, Paulo Coelho, 304
6) A Game of Thrones, George R. R. Martin, 864
Eklenecek girişlerin ayrı satırlara girildiğini ve ters eğik çizgi (\) karakteriyle sınırlandırıldığını unutmayın.
Komutu Çevir
SED, karakterleri çevirmek için bir komut sağlar ve şu şekilde temsil edilir: y. Karakterleri konuma göre dönüştürür. Translate komutunun sözdizimi aşağıda verilmiştir:
[address1[,address2]]y/list-1/list-2/
Çevirinin karakterin konumuna göre yapıldığına dikkat edin. list 1 aynı konumdaki karaktere list 2ve her iki liste de açık karakter listeleri olmalıdır. Normal ifadeler ve karakter sınıfları desteklenmez. Ek olarak, boyutulist 1 ve list 2 aynı olmalı.
Aşağıdaki örnek, Arapça sayıları Roma rakamlarına dönüştürür.
[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
I V IV XX
ben komut
Boşluklarla ayrılmış sözcükler ile sekme karakterleriyle ayrılmış sözcükleri yalnızca onlara bakarak ayırt edebilir misiniz? Kesinlikle değil. Ancak SED bunu sizin için yapabilir. SED,lmetindeki gizli karakterleri görüntülemek için komut. Örneğin, sekme karakteri\t ve Hat Sonu $karakter. Aşağıda verilen sözdizimil komut.
[address1[,address2]]l
[address1[,address2]]l [len]
Gösterim için sekme karakterleri içeren bir dosya oluşturalım. Basit olması için, boşlukları sekmelerle değiştirerek aynı dosyayı kullanacağız. Bekle! Ancak bunu nasıl yapmalı - dosyayı bir metin düzenleyicide açıp her boşluğu sekme ile değiştirerek? Kesinlikle değil! Bunun için SED komutlarını kullanabiliriz.
[jerry]$ sed 's/ /\t/g' books.txt > junk.txt
Şimdi gizli karakterleri kullanarak l komut:
[jerry]$ sed -n 'l' junk.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$
3)\tThe\tAlchemist,Paulo\tCoelho,197$
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$
5)\tThe\tPilgrimage,Paulo\tCoelho,288$
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$
Diğer SED komutları gibi, satır numaralarını ve desenleri de adres olarak kabul eder. Kendiniz deneyebilirsiniz.
Gelin SED'nin bir başka ilginç özelliğine yakından bakalım. SED'ye belirli sayıda karakterden sonra satır kaydırma yapması talimatını verebiliriz. Aşağıdaki örnek satırları 25 karakterden sonra kaydırır.
[jerry]$ sed -n 'l 25' books.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
1) A Storm of Swords,Geo\
rge R. R. Martin,1216$
2) The Two Towers,J. R. \
R. Tolkien,352$
3) The Alchemist,Paulo C\
oelho,197$
4) The Fellowship of the\
Ring,J. R. R. Tolkien,4\
32$
5) The Pilgrimage,Paulo \
Coelho,288$
6) A Game of Thrones,Geo\
rge R. R. Martin ,864$
Yukarıdaki örnekte, sarma sınırının l komutundan sonra sağlandığını unutmayın. Bu durumda 25 karakterdir. Bu seçenek GNU'ya özeldir ve SED'nin diğer varyantlarıyla çalışmayabilir.
0 kaydırma sınırı, yeni bir satır karakteri olmadığı sürece satırı asla kesmeyeceği anlamına gelir. Aşağıdaki basit komut bunu göstermektedir.
[jerry]$ sed -n 'l 0' 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) 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$
Komuttan Çık
Çıkış komutu, SED'ye mevcut yürütme akışından çıkması talimatını verir. Tarafından temsil edilirqkomut. Aşağıda, çıkış komutunun sözdizimi verilmiştir:
[address]q
[address]q [value]
Quit komutunun adres aralığını kabul etmediğini, yalnızca tek bir adresi desteklediğini unutmayın. Varsayılan olarak SED, okuma, yürütme ve tekrar iş akışını izler; ancak quit komutuyla karşılaşıldığında, basitçe mevcut yürütmeyi durdurur.
Dosyadan ilk 3 satırı yazdıralım.
[jerry]$ sed '3 q' 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) The Alchemist, Paulo Coelho, 197
Satır numarasına ek olarak, metinsel desenler de kullanabiliriz. Desen eşleşmesi başarılı olduğunda aşağıdaki komut çıkar.
[jerry]$ sed '/The Alchemist/ q' 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) The Alchemist, Paulo Coelho, 197
Buna ek olarak, SED ayrıca bir valueçıkış durumu olarak kullanılabilir. Aşağıdaki komut çıkış durumunu 100 olarak gösterir.
[jerry]$ sed '/The Alchemist/ q 100' 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) The Alchemist, Paulo Coelho, 197
Şimdi çıkış durumunu doğrulayalım.
[jerry]$ echo $?
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
100
Komutu Oku
SED'ye bir dosyanın içeriğini okuması ve belirli bir koşul eşleştiğinde bunları görüntülemesi talimatını verebiliriz. Komut alfabeyle temsil edilirr. Aşağıda, okuma komutunun sözdizimi verilmiştir.
[address]r file
Arasında tam olarak bir boşluk olması gerektiğini unutmayın. r komut ve dosya adı.
Bunu basit bir örnekle anlayalım. Adlı bir örnek dosya oluşturunjunk.txt.
[jerry]$ echo "This is junk text." > junk.txt
Aşağıdaki komut, SED'ye belgenin içeriğini okumasını söyler. junk.txt ve üçüncü satırdan sonra ekleyin.
[jerry]$ sed '3 r junk.txt' 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) The Alchemist, Paulo Coelho, 197
This is junk text.
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
Yukarıdaki örnekte 3, satır adresini ima eder, r komut adıdır ve junk.txtiçeriği görüntülenecek dosya adıdır. Ek olarak, GNU SED ayrıca bir dizi adresi kabul eder. Örneğin, aşağıdaki komut içeriğijunk.txt üçüncü, dördüncü ve beşinci satırlardan sonra.
[jerry]$ sed '3, 5 r junk.txt' 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) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
This is junk text.
5) The Pilgrimage, Paulo Coelho, 288
This is junk text.
6) A Game of Thrones, George R. R. Martin, 864
Diğer SED komutları gibi, okuma komutu da deseni bir adres olarak kabul eder. Örneğin, aşağıdaki komut içeriğijunk.txt desen eşleşmesi başarılı olduğunda.
[jerry]$ sed '/Paulo/ r junk.txt' 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) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
This is junk text.
6) A Game of Thrones, George R. R. Martin, 864
Komutu çalıştır
Kullanarak SED'den harici komutları çalıştırabiliriz. executekomut. Tarafından temsil edilmektedire. Aşağıda, yürütme komutunun sözdizimi verilmiştir.
[address1[,address2]]e [command]
Basit bir örnekle execute komutunu gösterelim. Aşağıdaki SED komutu UNIX'i yürütürdate üçüncü satırdan önce komut.
[jerry]$ sed '3 e date' 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
Sun Sep 7 18:04:49 IST 2014
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
Diğer komutlar gibi, desenleri de adres olarak kabul eder. Örneğin, aşağıdaki örnek,datebir kalıp eşleşmesi başarılı olduğunda komut. Her desen eşleşmesinden sonra, önce komutun yürütüldüğünü ve ardından desen tamponunun içeriğinin görüntülendiğini unutmayın.
[jerry]$ sed '/Paulo/ e date' 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
Sun Sep 7 18:06:04 IST 2014
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
Sun Sep 7 18:06:04 IST 2014
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Sözdizimini gözlemlerseniz e dikkatlice komut verin, fark edeceksiniz commandİsteğe bağlı. Sonra hiçbir komut sağlanmadığındae,desen tamponunun içeriğini harici bir komut olarak değerlendirir. Bunu açıklamak için, birkaç basit komutla bir commands.txt dosyası oluşturalım.
[jerry]$ echo -e "date\ncal\nuname" > commands.txt
[jerry]$ cat commands.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
date
cal
uname
Dosyadaki komutlar kendinden açıklamalıdır. Yokluğundacommand sonra e,SED tüm bu komutları tek tek yürütür. Aşağıdaki basit örnek bunu göstermektedir.
[jerry]$ sed 'e' commands.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
Sun Sep 7 18:14:20 IST 2014
September 2014
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Linux
Diğer SED komutları gibi, execute komutu da tüm geçerli adres aralıklarını kabul eder.
Çeşitli Komutlar
Varsayılan olarak, SED tek hat üzerinde çalışır, ancak birden fazla hat üzerinde de çalışabilir. Çok satırlı komutlar büyük harflerle gösterilir. Örneğin,n komut Nkomutu desen alanını temizlemiyor ve yazdırmıyor. Bunun yerine, geçerli desen boşluğunun sonuna bir satırsonu (\ n) ekler ve bir sonraki satırı girdi dosyasından geçerli desen alanına ekler ve SED komutlarının geri kalanını çalıştırarak SED'in standart akışıyla devam eder. Aşağıda verilen sözdizimiN komut.
[address1[,address2]]N
Kitap başlıklarının ve ilgili yazarlarının virgülle ayrılmış bir listesini yazdıralım. Aşağıdaki örnek bunu göstermektedir.
[jerry]$ sed 'N; s/\n/, /g' 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
Yukarıdaki örneğin nasıl çalıştığını anlayalım. Nkomutu ilk satırı okur, yani Kılıçların Fırtınası model arabelleğine \ n ve ardından sonraki satırı ekler. Desen alanı artık Kılıçların Fırtınası'nı içeriyor\nGeorge RR Martin. Bir sonraki adımda, yeni satırı virgül ile değiştiriyoruz.
Sevmek p komutumuz var P tarafından oluşturulan çok satırlı desen boşluğunun ilk bölümünü (gömülü satırsonuna kadar) yazdırmak için komut Nkomut. Aşağıda verilen sözdizimiP benzer komut p komut.
[address1[,address2]]P
Önceki örnekte, Nkomutu, kitap başlıklarının ve yazarlarının yeni satırlarla ayrılmış bir listesini oluşturur. Sadece ilk kısmını, yani sadece kitabın başlıklarını yazdıralım. Aşağıdaki komut bunu göstermektedir.
[jerry]$ sed -n 'N;P' books.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
A Storm of Swords
The Two Towers
The Alchemist
The Fellowship of the Ring
The Pilgrimage
A Game of Thrones
Yokluğunda Naynı şekilde davranır pkomut. Aşağıdaki basit komut bu senaryoyu göstermektedir.
[jerry]$ sed -n '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
Buna ek olarak, SED ayrıca bir vsürümü kontrol eden komut. Sağlanan sürüm, kurulu SED sürümünden daha büyükse, komut yürütme başarısız olur. Bu seçeneğin GNU'ya özgü olduğunu ve diğer SED varyantlarıyla çalışmayabileceğini unutmayın. Aşağıda verilen sözdizimiv komut.
[address1[,address2]]v [version]
İlk olarak, SED'nin güncel sürümünü bulun.
[jerry]$ sed --version
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
sed (GNU sed) 4.2.2
Aşağıdaki örnekte, SED sürümü 4.2.2 sürümünden daha büyüktür, bu nedenle SED komutu yürütmeyi durdurur.
[jerry]$ sed 'v 4.2.3' books.txt
Yukarıdaki kodu çalıştırdığınızda, aşağıdaki sonucu alırsınız:
sed: -e expression #1, char 7: expected newer version of sed
Ancak sağlanan sürüm 4.2.2 sürümünden küçükse veya ona eşitse, komut beklendiği gibi çalışır.
[jerry]$ sed 'v 4.2.2' 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