"|" juga membutuhkan garis miring terbalik untuk mendapatkan makna khusus.
echo "blia blib bou blf" | sed 's/bl\(ia\|f\)//g'
akan melakukan apa yang Anda inginkan.
Seperti yang Anda ketahui, jika semuanya gagal, baca manual :-).
Manual pengguna sed GNU , bagian 3.3 Ikhtisar Sintaks Ekspresi Reguler :
`REGEXP1 \ | REGEXP2 '
Cocok dengan REGEXP1 atau REGEXP2.
Perhatikan garis miring terbalik ...
Sayangnya, sintaks regex tidak benar-benar standar ... ada banyak varian, yang berbeda antara lain di mana "karakter khusus" perlu \ dan yang tidak. Dalam beberapa itu bahkan dapat dikonfigurasi atau tergantung pada sakelar (seperti pada GNU grep
, yang dapat Anda alihkan di antara tiga dialek regex yang berbeda).
Jawaban ini khususnya untuk sed GNU . Ada sed
varian lain , misalnya yang digunakan dalam BSD, yang berperilaku berbeda.
sed
tidak mendukung pergantian, tetapi hanya dengan sintaks regex "extended" (-E
) - yang berarti tidak ada garis miring terbalik pada pipa atau tanda kurung:echo "blia blib bou blf" | sed -E 's/bl(ia|f)//g'
Karena ada beberapa komentar mengenai
sed
implementasi non-Gnu : Setidaknya pada OS X, Anda dapat menggunakan-E
argumen untuksed
:Kemudian Anda dapat menggunakan metakarakter ekspresi reguler tanpa menghindarinya. Contoh:
sumber
GNU sed juga mendukung
-r
opsi (ekspresi reguler yang diperluas). Ini berarti Anda tidak perlu melarikan diri dari karakter meta:Keluaran:
sumber
-r
opsi benar-benar sangat membantu untuk keterbacaan ekspresi. Itu harus menjadi jawaban yang diterima.Itu
\|
tidak bekerja dengan sed pada Solaris 10 baik. Apa yang saya lakukan adalah menggunakansumber
Tindak lanjut: sed -E memungkinkannya di MacOS. Tidak perlu backslash untuk |.
sumber
Dalam GnuWin32 pada Windows, sintaksnya adalah
sed "s/thing1\|thing2/ /g" source > destination
.Kutipan harus bertipe
"
- ini "Diperlukan" untuk perintah yang akan diuraikan.sumber