Pendahuluan
SED adalah editor aliran teks yang digunakan pada sistem Unix untuk mengedit file dengan cepat dan efisien. Alat ini menelusuri, mengganti, menambah, dan menghapus baris dalam file teks tanpa membuka file di editor teks.
Pelajari cara menggunakan sed
perintah dan opsinya melalui contoh yang mudah diikuti.
Sintaks Linux
Sintaks utama untuk menggunakan Linux sed
perintahnya adalah:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
Opsi Linux yang dipilih
Anda dapat menjalankan sed
dengan opsi baris perintah berikut:
-b , --binary | Buka file input dalam mode biner untuk mempertimbangkan baris yang akan berakhir pada feed baris. |
--debug | Beralih ke mode debug untuk mencetak input dalam bentuk kanonik dan membubuhi keterangan eksekusi program. |
--follow-symlinks | Edit tujuan akhir jika file yang ditentukan adalah tautan simbolik. Ini hanya berfungsi jika digabungkan dengan -i pilihan. |
--help | Menampilkan informasi penggunaan. |
--i , --in-place [=SUFFIX] | Lakukan pengeditan di tempat dengan menimpa file asli. |
--posix | Nonaktifkan semua ekstensi ke POSIX sed untuk menyederhanakan penulisan skrip portabel. |
--version | Tampilkan versi sed berjalan di sistem. |
-E , -r , --regexp-extended | Gunakan ekspresi reguler yang diperluas. |
-e <em>script</em> , --expression=<em>script</em> | Tambahkan skrip tertentu untuk dijalankan dengan perintah. |
-f <em>script-file</em> | Tambahkan konten file skrip tertentu untuk dijalankan dengan perintah. |
-l <em>N</em> , --line-length=<em>N</em> | Tentukan panjang pembungkus baris yang diinginkan untuk l perintah (nilai default adalah 70). |
-n , --quiet , --silent | Nonaktifkan pencetakan keluaran. |
-s , --separate | Melihat file yang ditentukan sebagai terpisah, bukan sebagai satu aliran panjang yang berkelanjutan. |
--sandbox | Nonaktifkan menjalankan program eksternal dan operasikan hanya pada file input pada baris perintah. |
-u , --unbuffered | Minimalkan buffer input dan output. |
-z , --null-data , --zero-terminated | Melihat input sebagai kumpulan baris yang masing-masing diakhiri dengan byte nol. |
Contoh Linux sed
Di bawah ini kami tunjukkan sepuluh sed
. yang umum digunakan perintah, contoh, dan sintaks.
Untuk tutorial ini, kami membuat file sampel dengan nama foxinbox.tx t dengan isi sebagai berikut:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Perhatikan bahwa sed
tidak mempengaruhi file sumber kecuali diinstruksikan. Sebagai gantinya, perintah tersebut menampilkan perubahan yang dibuat oleh perintah yang diberikan dalam outputnya.
Untuk menimpa file asli, gunakan -i
pilihan untuk menyimpan modifikasi. Namun, praktik seperti itu tidak disarankan sebelum menguji keluaran perintah.
Atau, simpan hasil edit ke file lain (atau baru). Arahkan ulang output dengan menambahkan > newfilename.txt
di akhir perintah.
Ganti String Menggunakan Perintah sed
Linux sed
Perintah ini paling sering digunakan untuk mengganti teks. Ini mencari pola yang ditentukan dalam file dan menggantinya dengan string yang diinginkan.
Untuk mengganti teks menggunakan sed
, gunakan perintah pengganti s
dan pembatas (dalam kebanyakan kasus, garis miring - /
) untuk memisahkan bidang teks.
Oleh karena itu, sintaks untuk mengganti teks adalah:
sed 's/old_string/new_string/' filename.txt
Ganti old_string
dengan teks yang ingin Anda ganti dan new_string
dengan teks yang ingin Anda ubah.
Misalnya, untuk mengganti instance box
dengan kata bin
, jalankan:
sed 's/box/bin/' foxinbox.txt
Outputnya menunjukkan teks dengan kata-kata yang diganti, seperti pada gambar di bawah ini.
Ganti Semua Kemunculan String Menggunakan Perintah sed
Secara default, sed
hanya menggantikan kemunculan pertama dari string yang ditentukan di setiap baris. Ini mencari contoh pertama dari kata yang ditentukan dalam satu baris, menggantinya, dan pindah ke baris berikutnya.
Dengan beberapa contoh kata box
di baris yang sama, perintah hanya menggantikan yang pertama.
Jika Anda memiliki beberapa contoh kata yang sama dalam satu baris, tambahkan g
tandai ke perintah untuk mengubah semuanya.
Perintah untuk mengganti setiap kemunculan string yang diberikan dalam teks adalah:
sed 's/old_string/new_string/g' filename.txt
Untuk mengganti kata box
dengan kata bin
dalam file foxinbox.txt setiap kali, ketik:
sed 's/box/bin/g' foxinbox.txt
Output di atas menunjukkan bahwa perintah menggantikan semua instance dari kata box
.
Ganti Kejadian Tertentu dalam Baris Menggunakan Perintah sed
sed
perintah memungkinkan Anda memilih kemunculan string tertentu yang ingin Anda ganti dalam setiap baris. Untuk melakukannya, tambahkan bendera nomor seperti 1
, 2
, dll.:
sed 's/old_string/new_string/#' filename.txt
Misalnya, untuk mengganti kemunculan kedua dari kata box
di setiap baris teks dengan kata bin
, gunakan perintah ini:
sed 's/box/bin/2' foxinbox.txt
Perintah melewatkan tiga contoh kata karena mereka berada di baris pertama dan hanya menggantikan satu kata di akhir.
Hanya Cetak Baris Dengan Teks Pengganti
Secara default, sed
perintah mencetak seluruh konten file, bersama dengan teks pengganti dalam outputnya. Jika Anda memiliki banyak teks dan ingin fokus pada baris dengan perubahan yang diterapkan, tambahkan atribut yang diperlukan ke perintah.
Untuk mencetak hanya baris yang memiliki substitusi di bawah kondisi yang diberikan, gunakan sintaks:
sed -n 's/old_string/new_string/p' filename.txt
-n
opsi menonaktifkan pencetakan otomatis, sedangkan perintah pengganti p
menginstruksikan sed
untuk mencetak baris di mana substitusi terjadi.
Anda dapat menambahkan p
perintah ke perintah pengganti lainnya, seperti pada contoh di bawah ini:
sed -n 's/box/bin/2p' foxinbox.txt
Perintah tersebut menggantikan contoh kedua dari kata box
dalam satu baris dan mencetak baris tempat perubahan terjadi. Pada gambar di bawah, Anda hanya melihat satu baris dengan substitusi yang diterapkan.
Ganti String Menggunakan Perintah sed dan Abaikan Huruf Besar
Secara default, sed
perintah peka huruf besar-kecil. Misalnya, konten berikut berisi kata fox
dengan huruf pertama besar dan kecil:
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Untuk mengganti semua contoh kata rubah , jangan jalankan perintah biasa:
sed 's/fox/cow/' foxinbox.txt
Hasil dari perintah tersebut hanya mengubah kemunculan kata fox
di mana itu sepenuhnya huruf kecil:
Untuk mengabaikan huruf besar/kecil saat mengganti teks, tambahkan i
subcommand di akhir perintah:
sed 's/old_string/new_string/i' filename.txt
Oleh karena itu, perintah untuk mengubah huruf besar dan kecil dari kata rubah pada teks di atas adalah:
sed 's/fox/cow/i' foxinbox.txt
Outputnya menunjukkan perintah mengubah ketiga contoh string yang ditentukan.
Ganti String di Baris Tertentu Menggunakan Perintah sed
sed
perintah memungkinkan Anda untuk mengganti string dalam baris tertentu dengan menambahkan nomor baris sebagai awalan ke s
sub-perintah:
sed '# s/old_string/new_string/' filename.txt
Untuk menguji fitur ini pada contoh foxinbox.txt file, ganti kata socks
dengan sandals
hanya di baris keempat (4
) dari teks menggunakan perintah:
sed '4 s/socks/sandals/' foxinbox.txt
Outputnya menunjukkan bahwa contoh pertama dari kata socks
pada baris kedua tetap sama, sedangkan kata yang sama telah diganti dengan sandals
di baris keempat.
Ganti String Hanya di Rentang Garis Tertentu Menggunakan Perintah sed
Untuk mengganti beberapa contoh string dalam rentang baris, tetapi bukan seluruh teks, tentukan rentang tempat Anda ingin sed
untuk menggantikan. Sintaksnya adalah:
sed '#,# s/old_string/new_string/' filename.txt
Ganti #
pertama dengan nomor baris awal dan #
second kedua dengan nomor baris terakhir yang ingin Anda sertakan.
Misalnya, untuk mengganti dua kata terakhir dari kata kaus kaki dalam file foxinbox.txt (terletak di baris keempat dan keenam) dengan tulisan sandals
, Anda akan menjalankan:
sed '4,6 s/socks/sandals/' foxinbox.txt
Hapus Baris Tertentu Menggunakan Perintah sed
Untuk menghapus baris dari file dengan sed
perintah, gunakan d
subperintah dan sintaksnya:
sed '#d' filename.txt
Tentukan nomor baris yang ingin Anda hapus alih-alih hash (#
) simbol dan jalankan perintah.
Misalnya, untuk menghapus baris kedua dari foxinbox.txt file, ketik:
sed '2d' foxinbox.txt
Hapus Garis Dalam Rentang Garis Tertentu Menggunakan Perintah sed
Untuk menghapus beberapa baris dalam rentang baris menggunakan sed
perintah, ikuti sintaks:
sed '#,#d' filename.txt
Ganti simbol hash dengan awal dan akhir rentang garis. Misalnya:
sed '2,4d' foxinbox.txt
Perintah di atas menghapus baris 2, 3, dan 4 dari file.
Hapus Dari Spesifik ke Baris Terakhir Menggunakan Perintah sed
Untuk menghapus baris dari nomor baris tertentu ke baris terakhir, gunakan perintah:
sed '#,$d' filename.txt
Yaitu, untuk menghapus semuanya dari baris 3 hingga akhir foxinbox.txt , jalankan perintah ini:
sed '3,$d' foxinbox.txt