Akış Düzenleyici - Yararlı Tarifler

SED, bir sorunu çözmek için birden fazla yol sağlayan harika bir yardımcı programdır. Bu UNIX yolu ve SED bunu mükemmel bir şekilde kanıtlıyor. GNU / Linux, günlük görevleri gerçekleştirmek için birçok yararlı yardımcı program sağlar. SED kullanarak birkaç yardımcı programı simüle edelim. Bazen kolay bir sorunu zor yoldan çözüyoruz gibi görünebilir, ancak amaç sadece SED'in gücünü göstermektir.

Kedi Komutanlığı

Aşağıdaki örnekte, her satır varsayılan iş akışının bir parçası olarak yazdırılmıştır.

[jerry]$ sed '' 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

Aşağıdaki örnek, dosya içeriğini görüntülemek için print komutunu kullanır.

[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

Boş Satırları Çıkarma

Aşağıdaki örnekte, "^ $" boş satır anlamına gelir ve bir desen eşleşmesi başarılı olduğunda boş satırlar silinir.

[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'

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

Line #1 
Line #2

Benzer şekilde, aşağıdaki örnek satırı yalnızca boş olmadığında yazdırır.

[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed -n '/^$/!p'

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

Line #1 
Line #2

Bir C ++ Programından Yorumlanmış Satırları Kaldırma

Örnek bir C ++ programı oluşturalım.

#include <iostream> 
using namespace std; 

int main(void) 
{ 
   // Displays message on stdout. 
   cout >> "Hello, World !!!" >> endl;  
   return 0; // Return success. 
}

Şimdi aşağıdaki normal ifadeyi kullanarak yorumları kaldırın.

[jerry]$ sed 's|//.*||g' hello.cpp

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

#include <iostream>
using namespace std; 

int main(void) 
{ 
   cout >> "Hello, World !!!" >> endl; 
   return 0;  
}

Belirli Satırlardan Önce Yorum Ekleme

Aşağıdaki örnek, 3 ile 5 arasındaki satır numaralarının önüne açıklamalar ekler.

[jerry]$ sed '3,5 s/^/#/' hello.sh

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

#!/bin/bash 
#pwd 
#hostname 
#uname -a 
who 
who -r 
lsb_release -a

Wc -l komutu

"Wc -l" komutu, dosyada bulunan satırların sayısını sayar. Aşağıdaki SED ifadesi aynı şeyi simüle eder.

[jerry]$ sed -n '$ =' hello.sh

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

8

Baş Komuta

Varsayılan olarak, head komutu dosyanın ilk 10 satırını yazdırır. SED ile aynı davranışı simüle edelim.

[jerry]$ sed '10 q' 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

Kuyruk -1 Komutu

"Kuyruk -1" dosyanın son satırını yazdırır. Aşağıdaki sözdizimi simülasyonunu gösterir.

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ cat test.txt

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

Line #1 
Line #2

SED senaryosunu yazalım.

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

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

Line #2

Dos2unix Komutu

DOS ortamında bir satırsonu, CR / LF karakterlerinin birleşimiyle temsil edilir. Aşağıdaki "dos2unix" komutu simülasyonu bir DOS satırsonu karakterini UNIX yeni satır karakterine dönüştürür. GNU / Linux'ta bu karakter genellikle "^ M" (Kontrol M) karakteri olarak ele alınır.

[jerry]$ echo -e "Line #1\r\nLine #2\r" > test.txt 
[jerry]$ file test.txt

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

test.txt: ASCII text, with CRLF line terminators

SED kullanarak komutu simüle edelim.

[jerry]$ sed 's/^M$//' test.txt > new.txt   # Press "ctrl+v" followed "ctrl+m" to generate 
"^M" character. 
[jerry]$ file new.txt

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

new.txt: ASCII text

Şimdi dosya içeriklerini gösterelim.

[jerry]$ cat -vte new.txt

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

Line #1$ 
Line #2$

Unix2dos komutu

"Dos2unix" e benzer şekilde, UNIX yeni satır karakterini DOS satırsonu karakterine dönüştüren "unix2dos" komutu vardır. Aşağıdaki örnek bunun simülasyonunu göstermektedir.

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ file test.txt

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

test.txt: ASCII text

SED kullanarak komutu simüle edelim.

[jerry]$ sed 's/$/\r/' test.txt  > new.txt 
[jerry]$ file new.txt

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

new.txt: ASCII text, with CRLF line terminators

Şimdi dosya içeriklerini gösterelim.

Now let us display the file contents.

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

Line #1^M$ 
Line #2^M$

Cat -E komutu

"Cat -E" komutu satırın sonunu Dolar ($) karakteriyle gösterir. Aşağıdaki SED örneği aynı şeyin simülasyonudur.

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ cat -E test.txt

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

Line #1$ 
Line #2$

SED kullanarak komutu simüle edelim.

[jerry]$ sed 's|$|&$|' test.txt

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

Line #1$ 
Line #2$

Cat -ET Komutu

"Cat -ET" komutu her satırın sonunda Dolar ($) sembolünü ve TAB karakterlerini "^ I" olarak görüntüler. Aşağıdaki örnek, SED kullanılarak "cat -ET" komutunun simülasyonunu gösterir.

[jerry]$ echo -e "Line #1\tLine #2" > test.txt 
[jerry]$ cat -ET test.txt

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

Line #1^ILine #2$

SED kullanarak komutu simüle edelim.

[jerry]$ sed -n 'l' test.txt | sed 'y/\\t/^I/'

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

Line #1^ILine #2$

nl Komutu

"Nl" komutu sadece dosyaların satırlarını numaralandırır. Aşağıdaki SED komut dosyası, bu davranışı simüle etmektedir.

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ sed = test.txt | sed 'N;s/\n/\t/'

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

1 Line #1 
2 Line #2

İlk SED ifadesi satır numaralarını ve ardından içeriklerini yazdırır ve ikinci SED ifadesi bu iki satırı birleştirir ve yeni satır karakterlerini SEKME karakterlerine dönüştürür.

cp Komutu

"Cp" komutu dosyanın başka bir kopyasını oluşturur. Aşağıdaki SED komut dosyası, bu davranışı simüle etmektedir.

[jerry]$ sed -n 'w dup.txt' data.txt 
[jerry]$ diff data.txt dup.txt 
[jerry]$ echo $?

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

0

Komutu Genişlet

"Genişlet" komutu, TAB karakterlerini beyaz boşluklara dönüştürür. Aşağıdaki kod simülasyonunu gösterir.

[jerry]$ echo -e "One\tTwo\tThree" > test.txt 
[jerry]$ expand test.txt > expand.txt 
[jerry]$ sed 's/\t/     /g' test.txt > new.txt 
[jerry]$ diff new.txt expand.txt  
[jerry]$ echo $?

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

0

Tee Komutu

"Tee" komutu, verileri hem standart çıktı akışına hem de dosyaya döker. Aşağıda "tee" komutunun simülasyonu verilmiştir.

[jerry]$ echo -e "Line #1\nLine #2" | tee test.txt  
Line #1 
Line #2

SED kullanarak komutu simüle edelim.

[jerry]$ sed -n 'p; w new.txt' test.txt

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

Line #1 
Line #2

cat -s Komutu

UNIX "cat -s" komutu, tekrarlanan boş çıktı satırlarını bastırır. Aşağıdaki kod, "cat -s" komutunun simülasyonunu gösterir.

[jerry]$ echo -e "Line #1\n\n\n\nLine #2\n\n\nLine #3" > test.txt  
[jerry]$ cat -s test.txt

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

Line #1  
Line #2
Line #3

SED kullanarak komutu simüle edelim.

[jerry]$ sed '1s/^$//p;/./,/^$/!d' test.txt

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

Line #1  
Line #2  
Line #3

grep Command

Varsayılan olarak, "grep" komutu, bir kalıp eşleşmesi başarılı olduğunda bir satır yazdırır. Aşağıdaki kod simülasyonunu gösterir.

[jerry]$ echo -e "Line #1\nLine #2\nLine #3" > test.txt  
[jerry]$ grep "Line #1" test.txt

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

Line #1

SED kullanarak komutu simüle edelim.

[jerry]$ sed -n '/Line #1/p' test.txt

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

Line #1

grep -v Komutu

Varsayılan olarak, "grep -v" komutu, bir kalıp eşleşmesi başarısız olduğunda bir satır yazdırır. Aşağıdaki kod simülasyonunu gösterir.

[jerry]$ echo -e "Line #1\nLine #2\nLine #3" > test.txt  
[jerry]$ grep -v "Line #1" test.txt

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

Line #2 
Line #3

SED kullanarak komutu simüle edelim.

[jerry]$ sed -n '/Line #1/!p' test.txt

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

Line #2 
Line #3

tr Komut

"Tr" komutu karakterleri çevirir. Aşağıda onun simülasyonu verilmiştir.

[jerry]$ echo "ABC" | tr "ABC" "abc"

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

abc

SED kullanarak komutu simüle edelim.

[jerry]$ echo "ABC" | sed 'y/ABC/abc/'

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

abc