GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan perintah sed Linux

Beberapa perintah Unix setenar sed, grep, dan awk. Mereka sering dikelompokkan bersama, mungkin karena mereka memiliki nama yang aneh dan alat yang kuat untuk mengurai teks. Mereka juga berbagi beberapa kesamaan sintaksis dan logis. Dan meskipun semuanya berguna untuk mengurai teks, masing-masing memiliki spesialisasinya. Artikel ini membahas sed perintah, yang merupakan editor aliran .

Saya telah menulis sebelumnya tentang sed, serta ed relatif jauhnya. Agar nyaman dengan sed, ada baiknya membiasakan diri dengan ed karena itu membantu Anda terbiasa dengan gagasan buffer. Artikel ini mengasumsikan bahwa Anda sudah familiar dengan dasar-dasar sed, artinya Anda setidaknya telah menjalankan s/foo/bar/ klasik gaya perintah temukan-dan-ganti.

[Unduh lembar contekan sed gratis kami]

Menginstal sed

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, Anda sudah menginstal GNU atau BSD sed. Ini adalah implementasi ulang yang unik dari sed asli perintah, dan meskipun serupa, ada perbedaan kecil. Artikel ini telah diuji pada versi Linux dan NetBSD, sehingga Anda dapat menggunakan sed apa pun yang Anda temukan di komputer Anda dalam hal ini, meskipun untuk BSD sed Anda harus menggunakan opsi pendek (-n bukannya --quiet , misalnya) saja.

GNU sed umumnya dianggap sebagai sed paling kaya fitur yang tersedia, jadi Anda mungkin ingin mencobanya apakah Anda menjalankan Linux atau tidak. Jika Anda tidak dapat menemukan GNU sed (sering disebut gsed pada sistem non-Linux) di pohon port Anda, maka Anda dapat mengunduh kode sumbernya dari situs web GNU. Hal yang menyenangkan tentang menginstal GNU sed adalah Anda dapat menggunakan fungsi tambahannya tetapi juga membatasinya agar sesuai dengan spesifikasi POSIX sed, jika Anda memerlukan portabilitas.

Pengguna MacOS dapat menemukan GNU di MacPorts atau Homebrew.

Di Windows, Anda dapat menginstal GNU sed dengan Chocolatey.

Memahami ruang pola dan ruang tahan

Sed bekerja tepat pada satu baris dalam satu waktu. Karena tidak memiliki tampilan visual, ia menciptakan ruang pola , ruang dalam memori yang berisi baris saat ini dari aliran input (dengan karakter baris baru yang tertinggal dihapus). Setelah Anda mengisi ruang pola, sed menjalankan instruksi Anda. Ketika mencapai akhir perintah, sed mencetak konten ruang pola ke aliran keluaran. Aliran keluaran default adalah stdout , tetapi output dapat diarahkan ke file atau bahkan kembali ke file yang sama menggunakan --in-place=.bak pilihan.

Kemudian siklus dimulai lagi dengan baris input berikutnya.

Untuk memberikan sedikit fleksibilitas saat Anda menggosok file dengan sed, sed juga menyediakan ruang penangguhan (terkadang juga disebut hold buffer ), ruang dalam memori sed yang disediakan untuk penyimpanan data sementara. Anda dapat menganggap ruang tahan sebagai papan klip, dan faktanya, itulah yang ditunjukkan artikel ini:cara menyalin/memotong dan menempel dengan sed.

Pertama, buat file teks sampel dengan teks ini sebagai isinya:

Line one
Line three
Line two

Menyalin data untuk menyimpan ruang

Untuk menempatkan sesuatu di ruang tunggu sed, gunakan h atau H memerintah. h huruf kecil memberitahu sed untuk menimpa konten ruang tunggu saat ini, sementara huruf kapital H memberitahunya untuk menambahkan data ke apa pun yang sudah ada di ruang tunggu.

Digunakan sendiri, tidak banyak yang bisa dilihat:

$ sed --quiet -e '/three/ h' example.txt
$

--quiet (-n singkatnya) opsi menekan semua output tetapi apa yang telah dilakukan sed untuk persyaratan pencarian saya. Dalam hal ini, sed memilih baris mana pun yang berisi string three , dan menyalinnya untuk menyimpan ruang. Saya belum memberi tahu sed untuk mencetak apa pun, jadi tidak ada output yang dihasilkan.

Menyalin data dari ruang penyimpanan

Untuk mendapatkan beberapa wawasan tentang ruang tunggu, Anda dapat menyalin isinya dari ruang tunggu dan menempatkannya ke dalam ruang pola dengan g memerintah. Perhatikan apa yang terjadi:

$ sed -n -e '/three/h' -e 'g;p' example.txt

Line three
Line three

Baris kosong pertama dicetak karena ruang tunggu kosong saat pertama kali disalin ke ruang pola.

Dua baris berikutnya berisi Line three karena itulah yang ada di ruang tunggu dari baris dua dan seterusnya.

Perintah ini menggunakan dua skrip unik (-e ) murni untuk membantu keterbacaan dan pengaturan. Akan berguna untuk membagi langkah-langkah ke dalam skrip individual, tetapi secara teknis perintah ini berfungsi sama baiknya dengan satu pernyataan skrip:

$ sed -n -e '/three/h ; g ; p' example.txt

Line three
Line three

Menambahkan data ke ruang pola

G perintah menambahkan karakter baris baru dan konten ruang tunggu ke ruang pola.

$ sed -n -e '/three/h' -e 'G;p' example.txt
Line one

Line three
Line three
Line two
Line three

Dua baris pertama dari output ini berisi konten ruang pola (Line one ) dan ruang penyimpanan yang kosong. Dua baris berikutnya cocok dengan teks pencarian (three ), sehingga berisi ruang pola dan ruang penahan. Ruang penahan tidak berubah untuk pasangan garis ketiga, sehingga ruang pola (Line two ) dicetak dengan spasi (masih Line three ) tertinggal di akhir.

Melakukan potong dan tempel dengan sed

Sekarang Anda tahu cara menyulap string dari pola untuk menahan ruang dan kembali lagi, Anda dapat merancang skrip sed yang menyalin, lalu menghapus, dan kemudian menempelkan baris di dalam dokumen. Misalnya, file contoh untuk artikel ini memiliki Line three habis. Sed dapat memperbaikinya:

$ sed -n -e '/three/ h' -e '/three/ d' \
-e '/two/ G;p' example.txt
Line one
Line two
Line three
  • Skrip pertama menemukan baris yang berisi string three dan menyalinnya dari ruang pola ke ruang penampung, menggantikan apa pun yang saat ini ada di ruang penangguhan.
  • Skrip kedua menghapus semua baris yang berisi string three . Ini melengkapi yang setara dengan potong tindakan dalam pengolah kata atau editor teks.
  • Skrip terakhir menemukan baris yang berisi two dan tambahkan isi dari hold space ke pattern space lalu print pattern spacenya.

Pekerjaan selesai.

Membuat skrip dengan sed

Sekali lagi, penggunaan pernyataan skrip terpisah adalah murni untuk kesederhanaan visual dan mental. Perintah cut-and-paste berfungsi sebagai satu skrip:

$ sed -n -e '/three/ h ; /three/ d ; /two/ G ; p' example.txt
Line one
Line two
Line three

Itu bahkan dapat ditulis sebagai file skrip khusus:

#!/usr/bin/sed -nf

/three/h
/three/d
/two/ G
p

Untuk menjalankan skrip, tandai skrip dapat dieksekusi dan coba pada file sampel Anda:

$ chmod +x myscript.sed
$ ./myscript.sed example.txt
Line one
Line two
Line three

Tentu saja, semakin dapat diprediksi teks yang perlu Anda urai, semakin mudah untuk menyelesaikan masalah Anda dengan sed. Biasanya tidak praktis untuk menemukan "resep" untuk tindakan sed (seperti salin dan tempel) karena kondisi untuk memicu tindakan mungkin berbeda dari file ke file. Namun, semakin lancar Anda dengan perintah sed, semakin mudah untuk merancang tindakan kompleks berdasarkan input yang perlu Anda urai.

Hal-hal penting adalah mengenali tindakan yang berbeda, memahami kapan sed pindah ke baris berikutnya, dan memprediksi apa yang diharapkan dari pola dan ruang tahan.

Unduh lembar contekan

Sed itu kompleks. Ini hanya memiliki selusin perintah, namun sintaksisnya yang fleksibel dan kekuatan mentahnya berarti penuh dengan potensi yang tak ada habisnya. Saya dulu mereferensikan halaman-halaman one-liners yang pintar dalam upaya untuk mendapatkan hasil maksimal dari sed, tetapi tidak sampai saya mulai menemukan (dan kadang-kadang menemukan kembali) solusi saya sendiri, saya merasa seperti mulai sebenarnya belajar sed. Jika Anda mencari pengingat lembut tentang perintah dan tips berguna tentang sintaks, unduh lembar contekan sed kami, dan mulailah belajar sed sekali dan untuk selamanya!


Linux
  1. Cara menggunakan perintah grep Linux

  2. Cara Menggunakan Perintah id di Linux

  3. Cara menggunakan perintah "layar" di Linux

  1. Cara menggunakan perintah history di Linux

  2. Cara Menggunakan Perintah Sudo di Linux

  3. Cara menggunakan Perintah Su di Linux

  1. Cara Menggunakan Linux di Command

  2. Cara Menggunakan Perintah locate di Linux

  3. Perintah Linux sed:Cara Menggunakan Editor Streaming