Saya mengganti <B> dan </B> dengan <STRONG> dan </STRONG> dalam sebuah file. Ini seperti mengganti tag hmtl. Saya menggunakan sed 's/<B>/STRONG/g' . Itu berhasil tetapi jika dalam file [B] dan [/B] hadir. Kemudian juga diubah menjadi [STRONG] dan [/STRONG] . Saya tidak mengerti logika di baliknya.
Jawaban yang Diterima:
Secara default, sed menggunakan ekspresi reguler dasar. Itu berarti GNU memungkinkan < cocok dengan awal kata dan > mencocokkan akhir kata. Perhatikan:
$ echo '<B> BBB B' | sed 's/<B>/STRONG/g'
<STRONG> BBB STRONG
<B> cocok dengan kata B yang muncul dua kali dalam string di atas. Karena cocok dengan kata B dan bukan kurung sudut, kurung sudut dibiarkan tidak berubah.
Jika Anda ingin mencocokkan kurung sudut, < , biarkan garis miring terbalik:
$ echo '<B> BBB B' | sed 's/<B>/<STRONG>/g'
<STRONG> BBB B
<B> cocok dengan kurung siku terbuka diikuti dengan B diikuti dengan kurung siku penutup. Jadi, <B> diganti dengan <STRONG> tapi B dibiarkan sendiri.
Menangkap tag pembuka dan penutup
$ echo '<B> BBB B </B>' | sed -r 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>
-r adalah untuk regex yang diperluas tetapi versi terbaru dari GNU sed juga mendukung -E sebagai sinonim untuk -r . BSD sed menggunakan -E untuk ini dan, kabarnya, standar POSIX masa depan telah mengadopsi -E . Jadi, untuk kompatibilitas, seseorang mungkin ingin menggunakan (tips topi @Kos):
$ echo '<B> BBB B </B>' | sed -E 's|<(/)?B>|<1STRONG>|g'
<STRONG> BBB B </STRONG>