GNU/Linux >> Belajar Linux >  >> Linux

Belajar menggunakan editor teks Sed

Dibuat untuk versi 7 sistem operasi Unix asli AT&T, sed perintah telah disertakan dengan mungkin setiap Unix dan OS Linux sejak itu. sed aplikasi adalah editor streaming , dan tidak seperti editor teks, ia tidak membuka buffer visual tempat data file dimuat untuk diproses. Sebaliknya, ia beroperasi pada file, baris demi baris, sesuai dengan perintah yang diketikkan ke terminal atau serangkaian perintah dalam skrip.

Memasang

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Jika Anda menggunakan Linux, BSD, atau macOS, maka Anda sudah memiliki sed GNU atau BSD diinstal. Ini adalah dua implementasi ulang unik dari sed original asli perintah, dan meskipun serupa, mungkin ada perbedaan kecil. GNU sed umumnya dianggap sebagai sed yang paling kaya fitur di luar sana, dan tersedia secara luas di salah satu platform ini.

Jika Anda tidak dapat menemukan GNU sed (sering disebut gsed pada sistem non-Linux), Anda dapat mengunduh kode sumbernya dari situs web GNU. Hal yang menyenangkan tentang memiliki GNU sed diinstal adalah dapat digunakan untuk fungsi tambahannya, tetapi juga dapat dibatasi agar sesuai dengan spesifikasi POSIX dari sed , jika Anda memerlukan portabilitas.

Di Windows, Anda dapat menginstal GNU sed dengan Cokelat.

Cara kerja Sed

 sed aplikasi bekerja pada satu baris pada satu waktu. Karena tidak memiliki tampilan visual, ini menciptakan ruang pola—ruang dalam memori yang berisi baris saat ini dari aliran input (dengan karakter baris baru yang tertinggal dihapus). Setelah ruang pola terisi, instruksi Anda untuk sed dieksekusi. Terkadang perintah Anda bersyarat, dan terkadang mutlak, jadi hasil dari perintah ini bergantung pada cara Anda menggunakan sed .

Ketika akhir perintah tercapai, sed mencetak isi ruang pola ke aliran keluaran. Aliran keluaran default adalah stdout , tetapi dapat dialihkan ke file atau bahkan kembali ke file yang sama menggunakan --in-place=.bak pilihan.

Kemudian siklus dimulai lagi dengan baris input berikutnya.

Sintaks untuk sed perintahnya adalah:

$ sed --options [optional SCRIPT] [INPUT FILE or STREAM] 

Menemukan apa yang ingin Anda edit

Dalam editor visual, Anda biasanya menemukan apa yang ingin Anda ubah dalam file teks tanpa terlalu memikirkannya. Mata Anda (atau pembaca layar) memindai teks, menemukan kata yang ingin Anda ubah atau tempat yang ingin Anda sisipkan atau hapus teks, lalu Anda mulai mengetik. Tidak ada mode interaktif untuk sed , jadi Anda harus memberi tahu kondisi apa yang harus dipenuhi agar dapat menjalankan perintah tertentu.

Untuk contoh ini, asumsikan bahwa file bernama example.txt berisi teks ini:

halo
dunia
Ini baris ketiga.
Ini baris terakhir.

Nomor baris

Menentukan nomor baris memberitahu sed untuk beroperasi hanya pada baris tertentu dalam file.

Misalnya, perintah ini memilih baris 1 file dan mencetaknya. Karena sed tindakan default setelah pemrosesan juga untuk mencetak baris ke stdout , ini memiliki efek menduplikasi baris pertama:

$ sed ‘1p’ example.txt
hello
hello
world
Ini baris ketiga.
Ini baris terakhir.

Anda juga dapat menentukan nomor baris dalam langkah-langkah. Misalnya, 1~2 menunjukkan bahwa setiap 2 baris dipilih ("pilih setiap baris kedua dimulai dengan yang pertama"). Instruksi 1~3 artinya memilih setiap baris ketiga setelah baris pertama:

$ sed '1p' example.txt
hello
hello
world
Ini baris ketiga.
Ini baris terakhir.
Ini adalah baris terakhir.

Posisi garis

Anda hanya dapat beroperasi pada baris terakhir file dengan menggunakan $ sebagai pemilih:

$ sed '$p' example.txt
hello
world
Ini baris ketiga.
Ini baris terakhir.
Ini baris terakhir .

Di GNU sed , Anda dapat memilih lebih dari satu baris (sed '1,$p' mencetak baris pertama dan terakhir, misalnya).

Negasi

Pilihan apa pun berdasarkan nomor atau posisi, Anda dapat membalikkan dengan tanda seru (! ) karakter. Ini akan memilih semua baris kecuali baris pertama:

$ sed '1!p' example.txt
halo
world
world
Ini baris ketiga.
Ini baris ketiga.
Ini baris terakhir.
Ini baris terakhir.

Pencocokan pola

Anda dapat menganggap kecocokan pola sebagai penemuan operasi di pengolah kata atau browser. Anda memberikan sebuah kata (pola ), dan hasilnya dipilih. Sintaks untuk pencocokan pola adalah /pattern/ .

$ sed '/hello/p' example.txt
hello
hello
world
Ini baris ketiga.
Ini baris terakhir.
$ sed '/line/p' example.txt
hello
world
Ini baris ketiga.
Ini baris ketiga.
Ini baris terakhir .
Inilah baris terakhirnya.

Mengedit dengan Sed

Setelah Anda menemukan apa yang ingin Anda edit, Anda dapat melakukan tindakan apa pun yang Anda inginkan. Anda melakukan pengeditan dengan sed dengan perintah. Perintah dalam sed berbeda dari sed perintah itu sendiri. Jika itu membantu, anggap itu sebagai "tindakan" atau "kata kerja" atau "petunjuk".

Perintah dalam sed adalah huruf tunggal, seperti p untuk cetak perintah yang digunakan pada contoh sebelumnya. Mereka mungkin sulit untuk diingat pada awalnya, tetapi seperti semua hal, Anda dapat mengenalnya dengan latihan.

p untuk dicetak

 p instruksi mencetak apa pun yang saat ini disimpan di ruang pola.

d untuk dihapus

 d instruksi menghapus ruang pola.

$ sed '$d' example.txt
hello
world
Ini baris ketiga.
$ sed '1d' example.txt
world
Ini baris ketiga.
Ini baris terakhir.

s untuk mencari dan mengganti

 s perintah mencari pola dan menggantinya dengan yang lain. Ini mungkin penggunaan yang paling populer dan kasual untuk sed , dan seringkali yang pertama (dan terkadang satu-satunya) sed perintah yang dipelajari pengguna. Ini hampir pasti merupakan perintah yang paling berguna untuk mengedit teks.

$ sed ‘s/world/opensource.com/’
halo
opensource.com
Ini baris ketiga.
Ini baris terakhir.

Ada juga fungsi khusus yang dapat Anda gunakan dalam teks pengganti. Misalnya, \L mengubah teks pengganti menjadi huruf kecil dan \l melakukan hal yang sama hanya untuk karakter berikutnya. Ada yang lain, yang tercantum dalam sed dokumentasi (Anda dapat melihatnya dengan info sed perintah).

Karakter khusus & dalam klausa pengganti mengacu pada pola yang cocok:

$ sed ‘s/is/\U&/’ example.txt
halo
dunia
Ini adalah baris ketiga.
Ini adalah baris terakhir.

Anda juga dapat meneruskan tanda khusus untuk memengaruhi cara s memproses apa yang ditemukannya. g (untuk global , mungkin) flag memberi tahu s untuk menerapkan penggantian ke semua pertandingan yang ditemukan di telepon dan bukan hanya pertandingan pertama:

$ sed 's/is/\U&/g' example.txt
hello
world
Ini ADALAH baris ketiga.
Ini ADALAH baris terakhir.

Tanda penting lainnya termasuk nomor untuk menunjukkan kemunculan pola yang cocok mana yang akan terpengaruh:

$ sed 's/is/\U&/2' example.txt
hello
world
Ini IS baris tiga.
Ini baris terakhir.

The w flag, diikuti dengan nama file, menulis baris yang cocok ke file hanya jika terjadi perubahan:

$ sed 's/is/\U&/w sed.log' example.txt
hello
world
Ini adalah baris ketiga.
Ini adalah baris terakhir.
$ cat sed.log
Ini adalah baris ketiga.
Inilah baris terakhir.

Bendera dapat digabungkan:

$ sed 's/is/\U&/2w sed.log' example.txt
hello
world
Ini IS baris tiga.
Ini baris terakhir.
$ cat sed.log
Ini adalah baris ketiga.

Skrip

Ada banyak situs hebat di luar sana dengan sed "satu baris." Mereka memberi Anda sed yang berorientasi pada tugas perintah untuk memecahkan masalah umum. Namun, mempelajari sed untuk diri sendiri memungkinkan Anda untuk menulis satu kalimat Anda sendiri, dan itu dapat disesuaikan dengan kebutuhan spesifik Anda.

Skrip untuk sed dapat ditulis sebagai baris di terminal, atau dapat disimpan ke file dan dieksekusi dengan sed diri. Saya cenderung menulis skrip kecil semua sebagai satu perintah karena saya jarang menggunakan kembali sed perintah dalam kehidupan nyata. Ketika saya menulis sed skrip, biasanya sangat spesifik untuk satu file. Misalnya, setelah menulis draf awal artikel ini, saya menggunakan sed untuk membakukan huruf besar "sed", dan itu adalah tugas yang mungkin tidak akan pernah saya lakukan lagi.

Anda dapat mengeluarkan serangkaian perintah berbeda untuk sed dipisahkan dengan titik koma (; ).

$ sed ‘3t; s/line/\U&/’ example.txt
halo
dunia
Ini adalah LINE tiga.
Ini adalah baris terakhir.

Perubahan cakupan dengan kurung kurawal

Anda juga bisa membatasi hasil mana yang terpengaruh dengan kurung kurawal ({} ). Saat Anda menyertakan sed perintah dalam kurung, mereka hanya berlaku untuk pilihan tertentu. Misalnya, kata "garis" muncul dalam dua baris teks sampel. Anda dapat memaksa sed hanya mempengaruhi baris terakhir dengan mendeklarasikan kondisi kecocokan yang diperlukan ($ untuk menunjukkan baris terakhir) dan menempatkan s perintah yang ingin Anda lakukan dalam kurung kurawal segera setelahnya:

$ sed '$ {s/line/\U&/}' example.txt
hello
world
Ini adalah baris ketiga.
Ini adalah LINE terakhir.

Pelajari Sed

Anda dapat melakukan lebih banyak hal dengan sed dari apa yang dijelaskan dalam artikel ini. Saya bahkan belum sampai ke percabangan (b ), tes (t ), penangguhan spasi (H ), dan banyak fitur lainnya. Sukai ed , sed mungkin bukan editor teks yang akan Anda gunakan untuk pembuatan dokumen atau bahkan untuk setiap tugas skrip yang perlu Anda lakukan, tetapi ini adalah opsi ampuh yang Anda miliki sebagai pengguna POSIX. Mempelajari cara sed perintah terstruktur dan cara menulis skrip pendek dapat membuat perubahan cepat pada teks dalam jumlah besar. Baca info halaman GNU sed , atau halaman manual BSD sed , dan cari tahu apa yang sed dapat melakukannya untuk Anda.


Linux
  1. 6 metakarakter Linux yang saya suka gunakan di baris perintah

  2. Cara menggunakan heredoc sebagai editor teks

  3. Bagaimana Cara Menyisipkan Teks Sebelum Baris Pertama Sebuah File?

  1. Cara menggunakan perintah sed Linux

  2. Penggunaan lanjutan dari penampil file teks yang lebih sedikit di Linux

  3. Tambahkan Teks yang Cocok Ke Baris?

  1. Memanipulasi teks pada baris perintah dengan sed

  2. Cara menggunakan editor teks di InstantSite.

  3. Bagaimana cara menyisipkan teks di awal file?