GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Unix Sed:Temukan dan Ganti Teks Di Dalam File Menggunakan RegEx

Artikel ini adalah bagian dari seri Tutorial Unix Sed yang sedang berlangsung. Pada artikel sebelumnya, kita telah membahas tentang operasi sed print dan operasi sed delete.

Dalam artikel ini mari kita tinjau bagaimana menggunakan perintah pengganti sed “s”.

Perintah `s' mungkin yang paling penting dalam `sed' dan memiliki banyak opsi berbeda.

Perintah `s' mencoba mencocokkan ruang pola dengan REGEXP yang disediakan; jika kecocokan berhasil, maka bagian dari ruang pola yang dicocokkan tersebut diganti dengan REPLACEMENT.

Syntax:

#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
  • s adalah perintah pengganti
  • / adalah pembatas
  • REGEXP adalah ekspresi reguler yang cocok
  • REPLACEMENT adalah nilai yang harus diganti

BENDERA dapat berupa salah satu dari berikut

  • g Ganti semua instance REGEXP dengan REPLACEMENT
  • n Bisa berupa angka apa saja, ganti instance ke-n REGEXP dengan REPLACEMENT.
  • p Jika substitusi dilakukan, maka cetak ruang pola baru.
  • saya mencocokkan REGEXP dengan cara yang tidak peka huruf besar/kecil.
  • w file Jika substitusi dibuat, tuliskan hasilnya ke file yang diberikan.
  • Kita dapat menggunakan pembatas yang berbeda ( salah satu dari @ %; :) sebagai ganti /

Mari kita buat file geekstuff.txt terlebih dahulu yang akan digunakan dalam semua contoh yang disebutkan di bawah.

$ cat thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

Mari kita tinjau beberapa contoh menarik untuk substitusi sekarang.

1. Ganti Word “Linux” ke “Linux-Unix” Menggunakan sed s//

Pada contoh di bawah ini, pada baris output “1. Linux-Unix Sysadmin, Linux Scripting dll” hanya Linux pertama yang digantikan oleh Linux-Unix. Jika tidak ada bendera yang ditentukan, kecocokan baris pertama akan diganti.

$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

2. Substitusikan semua Kemunculan Kata Menggunakan sed s//g

Perintah sed di bawah ini menggantikan semua kemunculan Linux ke Linux-Unix menggunakan flag substitusi global “g”.

$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

3. Pengganti Hanya Kemunculan Kedua dari Sebuah Kata Menggunakan sed s//2

Pada contoh di bawah ini, pada baris output “1. Linux Sysadmin, Linux-Unix Scripting dll.” hanya kemunculan kedua dari Linux yang digantikan oleh Linux-Unix.

$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

4. Tulis Perubahan ke File dan Cetak Perubahan Menggunakan sed s//gpw

Contoh di bawah ini memiliki substitusi dengan tiga bendera. Ini mengganti semua kemunculan Linux ke Linux-Unix dan mencetak output yang diganti serta menulis yang sama ke file yang diberikan.

$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix
$ cat output
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix

5. Substitusi Hanya Ketika Garis Cocok dengan Pola Menggunakan sed

Dalam contoh ini, jika garis cocok dengan pola “-“, maka semua karakter dari “-” akan diganti dengan yang kosong.

$ sed '/\-/s/\-.*//g' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows

6. Hapus X Jumlah Karakter Terakhir Dari Setiap Baris Menggunakan sed

Contoh sed ini menghapus 3 karakter terakhir dari setiap baris.

$ sed 's/...$//' thegeekstuff.txt
# Instruction Gui
1. Linux Sysadmin, Linux Scripting e
2. Databases - Oracle, mySQL e
3. Security (Firewall, Network, Online Security e
4. Storage in Li
5. Productivity (Too many technologies to explore, not much time availab
#  Additional F
6. Windows- Sysadmin, reboot e

7. Hilangkan Komentar Menggunakan sed

Hapus semua baris komentar dari file seperti yang ditunjukkan di bawah ini menggunakan perintah sed.

$  sed -e 's/#.*//' thegeekstuff.txt

1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)

6. Windows- Sysadmin, reboot etc.

8. Hilangkan Komentar dan Baris Kosong Menggunakan sed

Dalam contoh ini, ada dua perintah yang dipisahkan oleh ';'

  • Perintah pertama menggantikan baris yang dimulai dengan # ke baris kosong
  • Perintah kedua menghapus baris kosong.
$ sed -e 's/#.*//;/^$/d'  thegeekstuff.txt
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
6. Windows- Sysadmin, reboot etc.

9. Konversi baris baru DOS (CR/LF) ke format Unix Menggunakan sed

Salin file DOS ke Unix, Anda dapat menemukan \r\n di akhir setiap baris.

Contoh ini mengonversi format file DOS ke format file Unix menggunakan perintah sed.

$sed 's/.$//' filename

10. Hilangkan Tag HTML dari file Menggunakan sed

Dalam contoh ini, ekspresi reguler yang diberikan dalam perintah sed cocok dengan tag html dan diganti dengan yang kosong.

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.

Linux
  1. Menggunakan sed untuk menemukan dan mengganti file teks di Linux

  2. Ganti Baris Dengan Konten Lain Menggunakan Sed Dan Paralel Untuk File Besar?

  3. Menggunakan 'sed' Untuk Menemukan Dan Mengganti?

  1. Bagaimana cara mengetahui akhir baris dalam file teks?

  2. Menggunakan grep dan sed untuk mencari dan mengganti string

  3. temukan teks yang cocok dan ganti baris berikutnya

  1. temukan dan salin file menggunakan Bash

  2. Temukan dan ganti dalam skrip shell

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