Stream Editor - Resep Berguna

SED adalah utilitas luar biasa yang memungkinkan berbagai cara untuk memecahkan masalah. Ini adalah cara UNIX dan SED dengan sempurna membuktikannya. GNU / Linux menyediakan banyak utilitas berguna untuk melakukan tugas sehari-hari. Mari kita simulasikan beberapa utilitas menggunakan SED. Kadang-kadang mungkin tampak kita memecahkan masalah yang mudah dengan cara yang sulit, tetapi tujuannya hanya untuk menunjukkan kekuatan SED.

Perintah Kucing

Dalam contoh berikut, setiap baris dicetak sebagai bagian dari alur kerja default.

[jerry]$ sed '' books.txt

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Contoh berikut menggunakan perintah cetak untuk menampilkan konten file.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Menghapus Garis Kosong

Dalam contoh berikut, "^ $" menyiratkan baris kosong, dan baris kosong dihapus saat pencocokan pola berhasil.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1 
Line #2

Demikian pula, contoh berikut mencetak baris hanya jika tidak kosong.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1 
Line #2

Menghapus Baris Komentar dari Program C ++

Mari kita buat contoh program C ++.

#include <iostream> 
using namespace std; 

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

Sekarang hapus komentar menggunakan ekspresi reguler berikut.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

#include <iostream>
using namespace std; 

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

Menambahkan Komentar Sebelum Baris Tertentu

Contoh berikut menambahkan komentar sebelum nomor baris 3 hingga 5.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Perintah wc -l

Perintah "wc -l" menghitung jumlah baris yang ada dalam file. Ekspresi SED berikut mensimulasikan hal yang sama.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

8

Komando Kepala

Secara default, perintah head mencetak 10 baris pertama file. Mari kita simulasikan perilaku yang sama dengan SED.

[jerry]$ sed '10 q' books.txt

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Perintah Ekor -1

The "tail -1" mencetak baris terakhir file. Sintaks berikut menunjukkan simulasinya.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1 
Line #2

Mari kita tulis skrip SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #2

Perintah Dos2unix

Dalam lingkungan DOS, baris baru diwakili oleh kombinasi karakter CR / LF. Simulasi berikut dari perintah "dos2unix" mengubah karakter baris baru DOS menjadi karakter baris baru UNIX. Di GNU / Linux, karakter ini sering diperlakukan sebagai karakter "^ M" (Kontrol M).

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

test.txt: ASCII text, with CRLF line terminators

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

new.txt: ASCII text

Sekarang mari kita tampilkan isi file.

[jerry]$ cat -vte new.txt

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1$ 
Line #2$

Perintah Unix2dos

Mirip dengan "dos2unix", ada perintah "unix2dos" yang mengubah karakter baris baru UNIX menjadi karakter baris baru DOS. Contoh berikut menunjukkan simulasi yang sama.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

test.txt: ASCII text

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

new.txt: ASCII text, with CRLF line terminators

Sekarang mari kita tampilkan isi file.

Now let us display the file contents.

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Perintah Cat -E

Perintah "cat -E" menunjukkan akhir baris oleh karakter Dollar ($). Contoh SED berikut adalah simulasi yang sama.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1$ 
Line #2$

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1$ 
Line #2$

Cat -ET Command

Perintah "cat -ET" menunjukkan simbol Dollar ($) di akhir setiap baris dan menampilkan karakter TAB sebagai "^ I". Contoh berikut menunjukkan simulasi perintah "cat -ET" menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1^ILine #2$

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1^ILine #2$

nl Perintah

Perintah "nl" hanya memberi nomor pada baris file. Skrip SED berikut mensimulasikan perilaku ini.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

1 Line #1 
2 Line #2

Ekspresi SED pertama mencetak nomor baris diikuti dengan isinya, dan ekspresi SED kedua menggabungkan dua baris ini dan mengonversi karakter baris baru menjadi karakter TAB.

cp Perintah

Perintah "cp" menyimpan salinan file lainnya. Skrip SED berikut mensimulasikan perilaku ini.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

0

Luaskan Command

Perintah "perluas" mengubah karakter TAB menjadi spasi putih. Kode berikut menunjukkan simulasinya.

[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 $?

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

0

Perintah Tee

Perintah "tee" membuang data ke aliran keluaran standar serta file. Diberikan di bawah ini adalah simulasi dari perintah "tee".

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

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1 
Line #2

Cat -s Command

Perintah UNIX "cat -s" menahan jalur keluaran kosong yang berulang. Kode berikut menunjukkan simulasi perintah "cat -s".

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1  
Line #2
Line #3

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1  
Line #2  
Line #3

grep Perintah

Secara default, perintah "grep" mencetak baris ketika pencocokan pola berhasil. Kode berikut menunjukkan simulasinya.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #1

grep -v Perintah

Secara default, perintah "grep -v" mencetak baris ketika pencocokan pola gagal. Kode berikut menunjukkan simulasinya.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #2 
Line #3

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

Line #2 
Line #3

tr Perintah

Perintah "tr" menerjemahkan karakter. Diberikan di bawah ini adalah simulasinya.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

abc

Mari kita simulasikan perintah menggunakan SED.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

abc