GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Unix Sed:Contoh Substitusi Sed Tingkat Lanjut

Artikel ini adalah bagian dari seri Tip dan Trik Unix Sed yang sedang berlangsung.

Dalam artikel sed kami sebelumnya, kami mempelajari — pencetakan sed, penghapusan sed, penggantian sed , penulisan file sed, dan beberapa perintah sed.

Dalam artikel ini, mari kita tinjau beberapa solusi menarik dengan perintah pengganti “s” di sed dengan beberapa contoh praktis.

Aku. Pembatas Pergantian Sed

Seperti yang kita bahas di posting sebelumnya, kita dapat menggunakan pembatas yang berbeda seperti @ % |; :dalam perintah pengganti sed.

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

$ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

Contoh 1 – sed @ pembatas:Ganti /opt/omni/lbin ke /opt/tools/bin

Saat Anda mengganti nama jalur yang memiliki '/', Anda dapat menggunakan @ sebagai pembatas alih-alih '/'. Pada contoh sed di bawah ini, di baris terakhir file input, /opt/omni/lbin diubah menjadi /opt/tools/bin.

$ sed 's@/opt/omni/lbin@/opt/tools/bin@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

Contoh 2 – sed / pembatas:Ganti /opt/omni/lbin ke /opt/tools/bin

Ketika Anda harus menggunakan '/' dalam substitusi terkait nama jalur, Anda harus menghindari '/' dalam data substitusi seperti yang ditunjukkan di bawah ini. Dalam contoh sed ini, pembatas '/' diloloskan di bagian REGEXP dan REPLACEMENT.

$ sed 's/\/opt\/omni\/lbin/\/opt\/tools\/bin/g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

II. Sed '&' Dapatkan String yang Cocok

Bagian tepat dari baris input yang cocok dengan Ekspresi Reguler diwakili oleh &, yang kemudian dapat digunakan di bagian pengganti.

Contoh 1 – sed &Penggunaan:Ganti /usr/bin/ ke /usr/bin/local

$ sed 's@/usr/bin@&/local@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin/local:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin/local:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

Pada contoh di atas '&' di bagian pengganti akan diganti dengan /usr/bin yang cocok dengan pola dan menambahkannya dengan /local. Jadi di output semua kemunculan /usr/bin akan diganti dengan /usr/bin/local

Contoh 2 – sed &Penggunaan:Cocokkan seluruh baris

&mengganti apa pun yang cocok dengan REGEXP yang diberikan.

$ sed 's@^.*$@<<<&>>>@g' path.txt
<<</usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin>>>
<<</usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:>>>
<<</opt/omni/lbin:/opt/omni/sbin:/root/bin>>>

Dalam contoh di atas regexp memiliki “^.*$” yang cocok dengan seluruh baris. Bagian pengganti <<<&>>> menulis seluruh baris dengan <<>> masing-masing di awal dan akhir baris.

III. Pengelompokan dan Referensi Kembali di Sed

Pengelompokan dapat digunakan dalam sed seperti ekspresi reguler normal. Grup dibuka dengan “\(” dan ditutup dengan “\)”. Pengelompokan dapat digunakan dalam kombinasi dengan referensi balik.

Referensi balik adalah penggunaan kembali bagian dari Ekspresi Reguler yang dipilih dengan pengelompokan. Referensi-balik di sed dapat digunakan baik dalam Ekspresi Reguler maupun di bagian pengganti dari perintah pengganti.

Contoh 1:Dapatkan hanya jalur pertama di setiap baris

$ sed 's/\(\/[^:]*\).*/\1/g' path.txt
/usr/kbos/bin
/usr/local/sbin
/opt/omni/lbin

Dalam contoh di atas, \(\/[^:]*\) cocok dengan jalur yang tersedia sebelum first :datang. \1 menggantikan grup pertama yang cocok.

Contoh 2:Multigrouping

Di file path.txt ubah urutan bidang di baris terakhir file.

$ sed '$s@\([^:]*\):\([^:]*\):\([^:]*\)@\3:\2:\1@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/omni/bin:
/root/bin:/opt/omni/sbin:/opt/omni/lbin

Pada perintah di atas $ menentukan substitusi yang terjadi hanya untuk baris terakhir. Output menunjukkan bahwa urutan nilai jalur di baris terakhir telah dibalik.

Contoh 3:Dapatkan daftar nama pengguna di file /etc/passwd

Contoh sed ini hanya menampilkan bidang pertama dari file /etc/passwd.

$sed 's/\([^:]*\).*/\1/' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

Contoh 4:Tanda kurung karakter pertama setiap kata

Contoh sed ini mencetak karakter pertama dari setiap kata dalam tanda kurung.

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff

Contoh 5:Buat bilangan sederhana.

Mari kita buat file bernama angka yang memiliki daftar angka. Contoh perintah sed di bawah ini digunakan untuk mengomifikasi angka hingga ribuan.

$ cat  numbers
1234
12121
3434
123

$sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g' numbers
1,234
12,121
3,434
123

Linux
  1. Tutorial Unix Sed:Cara Mengeksekusi Beberapa Perintah Sed

  2. sed Contoh Perintah di Linux

  3. Substitusi variabel lingkungan di sed

  1. Tutorial Bash HereDoc Dengan Contoh

  2. UNIX / Linux:10 Contoh Perintah Netstat

  3. 10 Contoh Perintah Xargs di Linux / UNIX

  1. Tutorial Perintah Awk Linux/UNIX dengan Contoh

  2. Tutorial Perintah Linux ln untuk Pemula (5 Contoh)

  3. Tutorial Perintah Linux nl untuk Pemula (7 Contoh)