GNU/Linux >> Belajar Linux >  >> Linux

Perlu Escape Karakter Regex Di Sed Untuk Diinterpretasikan Sebagai Karakter Regex?

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.


Linux
  1. Apa yang salah dengan lookahead regex saya di GNU sed?

  2. Bagaimana cara mengganti karakter dengan sed secara rekursif?

  3. Ekspresi Reguler untuk menemukan karakter ganda di Bash

  1. Mengekstrak Regex yang Dicocokkan Dengan 'sed' Tanpa Mencetak Karakter Sekitarnya?

  2. Ekspresi reguler dengan sed

  3. Urutan escape yang bergema tidak diinterpretasikan di Linux tty

  1. Bisakah Sed Mengganti Karakter Baris Baru?

  2. Sed Hapus Karakter Dari Baris Baru?

  3. Definisi Ekspresi Reguler?