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