SED disingkat 'Stream Editor' adalah editor aliran teks yang kuat yang dapat melakukan banyak fungsi pada file yang mencari, menemukan dan mengganti dan penyisipan. Perintah sed adalah perintah sadar ekspresi reguler, artinya ia dapat memahami ekspresi reguler yang diberikan padanya.
Padahal, SED terutama atau terutama digunakan untuk substitusi teks. Dengan bantuan SED, kita dapat mengedit file tanpa membukanya, yang akan jauh lebih cepat dan lebih cepat untuk menemukan dan mengganti sesuatu dalam file, daripada membuka file dan mengubahnya.
Dalam tutorial ini, kita akan mempelajari perintah SED dengan contoh yang mudah digunakan dan dipahami di shell Linux kita.
Sintaks Perintah Sed
Sintaks perintah Sed cukup sederhana untuk dipahami tetapi sangat kuat digunakan. Berikut sintaks dasar SED sebagai berikut :
sed OPTIONS... [SCRIPT] [INPUTFILE...]
Pertimbangkan file teks di bawah ini ('content.txt') sebagai input untuk perintah sed example.
$ cat > content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
Berikut adalah contoh sed yang paling sering digunakan sebagai berikut.
1. Mengganti String (kata atau karakter)
Sed dapat digunakan untuk mencari dan mengganti string (kata atau karakter) pada input. Opsi s
digunakan untuk mengganti string. Secara default, perintah sed hanya menggantikan kemunculan pertama string dalam sebuah baris.
Perintah berikut menggantikan kata 'lorem' dengan 'Lorem' di file 'content.txt' untuk kemunculan pertama di setiap baris:
$ sed 's/lorem/Lorem/' content.txt
Di sini 'lorem' adalah string pencarian dan 'Lorem' adalah string pengganti.
Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
2. Ganti semua kemunculan string dalam file
Untuk mencari dan mengganti semua kemunculan string dalam file, gunakan /g
bendera (pengganti global).
Pada perintah berikut, /g
flag digunakan untuk mengganti semua kemunculan string 'lorem' dengan 'Lorem' pada file 'content.txt'.
$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
3. Mengganti kemunculan ke-n dari suatu pola dalam sebuah baris
Perintah sed dapat digunakan dengan /1
,/2
atau n
(nomor apa saja) untuk menggantikan kemunculan string pertama, kedua, atau ke-n dalam satu baris.
Perintah berikut menggantikan kemunculan kedua (2) kata 'lorem' dengan 'Lorem' di setiap baris.
$ sed 's/lorem/Lorem/2' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
Mirip dengan perintah tr, sed dapat mengganti semua kemunculan karakter di set1 dengan karakter yang sesuai di set2 menggunakan y/set1/set2/
.
$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple
4. Ganti dari kemunculan ke-n ke semua kemunculan di setiap baris
Kita bisa menggunakan kombinasi /1
,/2
atau n
(nomor apa saja) dan /g
untuk mengganti semua pola dari kemunculan ke-n string di setiap baris.
Pada contoh berikut, semua kemunculan string 'lorem' akan diganti dengan 'Lorem' dari kemunculan ke-2 di setiap baris:
$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
5. Cari dan ganti string pada nomor baris tertentu
Dengan sed, kita dapat membatasi fungsi hanya untuk mengganti string pada nomor baris tertentu.
Pada perintah berikut, kita dapat menemukan bahwa hanya baris kedua yang diganti dengan string 'Lorem'.
$ sed '2 s/lorem/Lorem/' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
6. Menampilkan sebagian teks dari sebuah file
Menggunakan perintah sed Anda dapat melihat beberapa bagian dari file daripada seluruh file. -n
opsi digunakan untuk menekan pencetakan semua konten dan p
opsi ini digunakan untuk mencetak baris tertentu.
Perintah berikut akan mencetak baris dari 2 hingga 4:
$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
7. Tampilkan semua konten kecuali baris tertentu
Perintah Sed memungkinkan menampilkan semua isi file kecuali baris tertentu. Pada perintah berikut tampilkan semua konten pada file 'content.txt' kecuali baris 1 dan 2:
$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
8. Tampilkan semua garis kecuali garis pencocokan pola
Kita dapat menggunakan perintah sed berikut untuk menghapus baris yang memiliki pola pencarian yang disebutkan. Pada output, baris dengan "belajar" dihapus karena cocok dengan pola pencarian.
$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
9. Tampilkan baris yang diganti
Untuk mencetak baris yang diganti, kami menggunakan /p
tandai bersama dengan -n
.
Pada output, kita bisa melihat tidak ada baris terakhir karena tidak memiliki pola pencarian 'lorem'.
$ sed -n 's/lorem/Lorem/p' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Contoh lainnya dari bendera 'p' dan 'n'
Cetak baris pertama
$ sed -n '1p' content.txt
Rentang garis cetak
$ sed -n '1,4p' content.txt
Cetak beberapa baris
$ sed -n '1p;4p' content.txt
Cetak file
$ sed -n 'p' content.txt
Cetak berisi regex atau kata
$ sed -n '/RedHat/p' content.txt
Cetak jika berisi angka
$ sed -n '/[0-9]/p' content.txt
Cocokkan ekspresi reguler dan ganti
$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Gunakan sed seperti grep
Perintah sed berikut akan mencari 'root' pengguna di file '/etc/passwd':
$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
10. Gabungkan perintah SED
Jika kita harus melakukan beberapa ekspresi sed maka kita perlu menggunakan e
opsi untuk merangkai perintah sed.
Mari kita ambil contoh, untuk mengganti semua kemunculan "lorem" dengan "Lorem" dan menghapus baris yang cocok dengan pola pencarian.
$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
11. Sisipkan baris kosong setelah setiap baris
Menggunakan G
pilihan Anda dapat menyisipkan satu atau beberapa baris kosong dalam file.
Perintah berikut menyisipkan satu baris kosong di antara baris:
$ sed G content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
Untuk menyisipkan dua baris kosong, jalankan perintah di bawah ini:
$ sed 'G;G' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
11. Edit dan buat salinan cadangan dari file asli
Sed memungkinkan untuk mengedit file dan pada saat yang sama membuat salinan cadangan dari file asli. Kami menggunakan 'i.-e
mengedit.
Perintah berikut membuat cadangan file asli 'content.txt' sebagai 'content.txt.bak'
$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
12. Menghapus garis dengan pola
Menggunakan perintah sed ini, Anda dapat menghapus baris yang dimulai dengan string tertentu &diakhiri dengan string lain. Pada output berikut, baris dengan awalan 'lorem' dan diakhiri dengan 'teks'. dihapus:
$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
13. Menambahkan String ke baris
Kita dapat menjalankan perintah berikut untuk menambahkan beberapa konten sebelum setiap baris menggunakan regex.
Pada output berikut, kita dapat melihat 'Di sini' ditambahkan di depan setiap baris.
$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.
Sisipkan string sebelum setiap baris:
$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.
Tambahkan string setelah setiap baris:
$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line
14. Ekstrak nama pengguna dari file /etc/passwd
Perintah sed dapat dengan mudah digunakan untuk mendapatkan semua daftar semua nama pengguna dari file '/etc/passwd'.
Perintah sed berikut akan mengekstrak semua nama pengguna linux yang tersedia:
$ sed 's/\([^:]*\).*/\1/' /etc/passwd root daemon bin sys sync man lp news uucp proxy backup list gnats nobody systemd-network systemd-resolve syslog messagebus uuidd debian-spamd
admin
15. Cetak baris tanpa baris komentar (#) &baris kosong
Cetak tanpa komentar (#) baris dan baris kosong sederhana dengan sed.
Kita dapat menjalankan perintah berikut untuk mencetak semua baris yang tidak mengandung simbol komentar (#) dan semua baris kosong.
$ sed -e 's/#.*//;/^$/d' content.txt
Untuk menghapus hanya baris yang dikomentari:
$ sed -e 's/#.*//' content.txt
16. Ekstrak semua alamat ip dengan sed dari string
Mari kita periksa cara mengekstrak alamat IP menggunakan perintah sed dengan regex. Saya telah menambahkan beberapa alamat IP ke 'content.txt' untuk pengujian.
$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Sekarang mari gunakan regex untuk mengekstrak alamat IP dari file 'content.txt' sebagai berikut:
$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Saya menemukan perintah mudah lainnya untuk mendapatkan hasil yang sama, periksa di bawah ini:
$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137
Kita juga dapat menggabungkan sed dengan perintah lain menggunakan pipa (|), periksa contoh di bawah ini:
$ ip addr | sed -n '/inet/p' | sed -e 's/ */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64
17. Arahkan ulang dan tulis ke file
w
flag dapat digunakan untuk menulis output ke file, alih-alih mencetak pada output standar. w
perintah membutuhkan nama file yang outputnya akan ditulis.
Perintah sed berikut akan mengarahkan output ke file baru 'rootpwd.txt':
$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash
Kesimpulan
Dalam tutorial perintah Linux ini, kita mempelajari sintaks dasar perintah sed dan dengan contoh sed yang paling umum dan banyak digunakan. Seseorang dapat menggunakan sed di bash atau skrip shell untuk melakukan tugas otomatis yang berbeda dalam manipulasi teks dan operasi sed di shell Linux. Dengan tutorial ini, seseorang dapat dengan mudah memahami sed dan segera mulai menerapkannya saat diperlukan. Jika ada pertanyaan, saran, masukan silahkan tulis di kolom komentar di bawah.