GNU/Linux >> Belajar Linux >  >> Linux

Cara Menggunakan Sed untuk Menemukan dan Mengganti String dalam File

Pendahuluan

sed (s tream ed itor) utilitas adalah penguraian teks dan alat transformasi berorientasi garis. sed perintah menggunakan bahasa pemrograman sederhana dan ekspresi reguler untuk memproses aliran teks dan file. Fitur yang paling sering digunakan dari sed perintah adalah substitusi string.

Panduan ini menunjukkan cara menggunakan sed untuk menemukan dan mengganti string melalui contoh.

Prasyarat

  • Akses ke baris perintah/terminal.
  • File teks (panduan ini menyediakan example.txt berkas).
  • Perintah terminal dasar (ambil lembar contekan gratis kami).

sed Temukan dan Ganti Sintaks

Sintaks untuk mencari dan mengganti teks menggunakan sed perintahnya adalah:

sed -i 's/<search regex>/<replacement>/g' <input file>

Perintah terdiri dari berikut ini:

  • -i memberitahu sed perintah untuk menulis hasil ke file, bukan output standar.
  • s menunjukkan perintah pengganti.
  • / adalah karakter pembatas yang paling umum. Perintah tersebut juga menerima karakter lain sebagai pembatas, yang berguna ketika string berisi garis miring.
  • <search regex> adalah parameter pencarian string atau ekspresi reguler.
  • <replacement> adalah teks pengganti.
  • g adalah flag pengganti global, yang menggantikan semua kemunculan string, bukan hanya yang pertama.
  • <input file> adalah file tempat pencarian dan penggantian terjadi.

Kutipan tunggal membantu menghindari ekspansi meta-karakter di shell.

Versi BDS dari sed (termasuk macOS) tidak mendukung pencocokan peka huruf besar-kecil atau penggantian file. Perintah untuk penggantian file terlihat seperti ini:

sed 's/<search regex>/<replacement>/g' <input file> > <output file>

Atau, instal versi GNU sed di macOS dengan homebrew:

brew install gnu-sed

Jalankan GNU sed perintah sebagai berikut:

gsed -i 's/<search regex>/<replacement>/g' <input file>

Ganti sed perintah dengan gsed untuk mengikuti contoh di bawah ini.

sed Ganti Contoh

Contoh dari panduan ini menggunakan file sampel untuk mengganti string.

1. Buat contoh file teks:

nano example.txt

2. Tambahkan konten berikut:

foobarbazfoobarbaz
foo bar baz foo bar baz
Foo Bar Baz Foo Bar Baz
FOO BAR BAZ FOO BAR BAZ
/foo/bar/baz /foo/bar/baz

Gunakan file sebagai masukan untuk menguji contoh di bawah.

Catatan :Untuk sed full lengkap tutorial perintah untuk Linux, lihat panduan sed command Linux kami.

Ganti String Pertama yang Cocok

1. Untuk mengganti contoh kata bar yang pertama kali ditemukan dengan linux di setiap baris file, jalankan:

sed -i 's/bar/linux/' example.txt

2. -i tag menyisipkan perubahan ke example.txt mengajukan. Periksa isi file dengan perintah cat:

cat example.txt

Perintah menggantikan contoh pertama bar dengan linux di setiap baris, termasuk substring. Pencocokannya tepat, mengabaikan variasi kapitalisasi.

Ganti Global

Untuk mengganti setiap kecocokan string dalam file, tambahkan g bendera ke skrip. Misalnya:

sed -i 's/bar/linux/g' example.txt

Perintah secara global menggantikan setiap instance bar dengan linux dalam file.

Cocokkan dan Ganti Semua Casing

Untuk menemukan dan mengganti semua contoh kata dan mengabaikan kapitalisasi, gunakan I parameter:

sed -i 's/bar/linux/gI' example.txt

Perintah tersebut menggantikan semua contoh kata bar dalam teks, mengabaikan kapitalisasi.

Abaikan Substring

Tambahkan batas kata (\b ) ke sed perintah untuk mengabaikan substring saat mengganti string dalam file. Misalnya:

sed -i 's/\bbar\b/linux/gI' example.txt

Atau, ubah pembatas untuk membuat perintah lebih mudah dibaca:

sed -i 's:\bbar\b:linux:gI' example.txt

Perintah mengabaikan substring, hanya mencocokkan seluruh kata.

Menemukan dan Mengganti String Dengan Garis miring

Keluar dari karakter garis miring untuk menemukan dan mengganti string dengan garis miring. Misalnya, untuk mengganti /foo/bar/baz dengan /home/kb , gunakan sintaks berikut:

sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt

Atau, ubah pembatas untuk menghindari keluarnya karakter:

sed -i 's:/foo/bar/baz:/home/kb:g' example.txt

Gunakan sintaks ini untuk mengganti jalur dan string lain dengan garis miring.

Temukan dan Ganti dengan Ekspresi Reguler

Pola pencarian untuk sed perintah menerima ekspresi reguler, mirip dengan grep regex. Misalnya, untuk mencocokkan semua huruf kapital dan menggantinya dengan 5 , gunakan:

sed -i 's/[A-Z]/5/g' example.txt

Pola regex membantu menemukan semua huruf kapital dan menggantinya dengan nomor dalam file.

Referensi Ditemukan String

Gunakan karakter ampersand (& ) untuk mereferensikan string yang ditemukan. Misalnya, untuk menambahkan garis miring (/ ) sebelum setiap instance foo dalam sebuah file, gunakan:

sed -i 's/foo/\/&/gI'example.txt

Alih-alih mengetik ulang parameter penelusuran, & tanda mereferensikan string yang ditemukan.

Buat Cadangan

Untuk membuat file cadangan sebelum menimpa yang sudah ada, tambahkan .bak parameter ke -i tag.

sed -i.bak 's/foo/FOO/g' example.txt

Perintah membuat cadangan (example.txt.bak ) sebelum menimpa yang asli. Gunakan metode ini untuk menyimpan salinan dalam format aslinya dan menghindari penimpaan.

Temukan dan Ganti Rekursif

Gunakan perintah find untuk mencari file dan menggabungkannya dengan sed untuk mengganti string dalam file secara rekursif. Misalnya:

find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +

Perintah menemukan semua file yang dimulai dengan contoh dan menjalankan sed perintah pada file. Perintah yang dieksekusi menggantikan semua huruf dengan 5 , mengabaikan kapitalisasi.

Kesimpulan

Setelah melalui contoh dalam panduan ini, Anda tahu cara menggunakan sed untuk mengganti string dalam file. sed command adalah utilitas manipulasi teks yang kuat dengan banyak fitur canggih.

Selanjutnya, lihat perintah awk atau gawk untuk mempelajari tentang alat manipulasi teks lainnya.


Linux
  1. Menggunakan grep dan sed untuk mencari dan mengganti string

  2. Temukan dan ganti dalam skrip shell

  3. Bagaimana cara menggunakan sed untuk mengganti variabel file konfigurasi?

  1. Cara Menggunakan Awk dan Ekspresi Reguler untuk Memfilter Teks atau String dalam File

  2. Gunakan Perintah SED untuk Menemukan dan Mengganti String di File - Bagaimana cara melakukan tugas ini di Ubuntu?

  3. Temukan dan ganti teks dalam file di antara rentang baris menggunakan sed

  1. Bagaimana Cara Mengganti String Dalam File?

  2. Bagaimana Cara Menggunakan Sed Untuk Mengganti String Multi-baris?

  3. Bagaimana Mengganti String Dengan String Yang Mengandung Slash Dengan Sed?