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>