Tampaknya mis.cat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
bahwa saya harus melarikan diri karakter untuk membentuk ekspresi reguler. Dalam hal ini saya harus menghindari kawat gigi untuk ditafsirkan beberapa kali.
Mengapa? Saya mengharapkan semuanya akan menjadi karakter regex kecuali melarikan diri. Yaitu. sebaliknya.
Jawaban yang Diterima:
Ini karena sed
menggunakan POSIX BRE (Ekspresi Reguler Dasar) sebagai lawan dari ERE (Ekspresi Reguler Diperpanjang) yang mungkin Anda gunakan dari Perl atau teman.
Dari sed(1)
halaman manual:
REGULAR EXPRESSIONS
POSIX.2 BREs should be supported, but they aren't completely because of
performance problems. The n sequence in a regular expression matches
the newline character, and similarly for a, t, and other sequences.
Kutipan yang relevan dari tautan di atas:
Ekspresi Reguler Dasar atau rasa BRE menstandarkan rasa yang mirip dengan yang digunakan oleh perintah grep UNIX tradisional. Ini adalah rasa ekspresi reguler tertua yang masih digunakan sampai sekarang. Satu hal yang membedakan rasa ini adalah bahwa sebagian besar karakter meta memerlukan garis miring terbalik untuk memberikan karakter meta rasa. Sebagian besar rasa lainnya, termasuk POSIX ERE, menggunakan garis miring terbalik untuk menekan makna metakarakter.
Dikutip kata demi kata dari komentar Craig Sanders:
Perhatikan bahwa setidaknya di GNU sed, Anda dapat memberi tahu sed untuk menggunakan regexp yang diperluas dengan opsi baris perintah -r atau –regexp-extended. Ini berguna jika Anda ingin menghindari keburukan skrip sed Anda dengan pelolosan yang berlebihan.