Itu jika Anda ingin nol atau lebih digit. /[[:digit:]]*\. /akan cocok dengan string foo.karena Anda mengizinkan nol digit. Jika Anda ingin satu atau lebih penggunaan \+seperti yang ditunjukkan
glenn jackman
71
Dua masalah:
sedtidak mendukung \d. Gunakan [0-9]atau [[:digit:]].
+harus backslashed untuk mendapatkan arti khusus: \+.
alih-alih melakukan backslashing tanda + (yang tidak berfungsi pada Mac OS X, misalnya) Anda dapat menggunakan opsi -E untuk interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).Sedihnya, ini tidak membantu dengan masalah \ d ...
gMale
4
@gmale: -Etidak berfungsi untuk GNU sed, ia digunakan -rsebagai gantinya.
choroba
12
Oke ... itu benar-benar terlihat seperti sedmenyebalkan ketika datang ke portabilitas ...
iconoclast
@ choroba saya pikir saya bingung sendiri hari ini. Saya akan menghapus komentar berisik saya ...
Steven Lu
Pada dasarnya, yang saya coba peringatkan adalah: Jika Anda tidak menggunakan extended regex ( -Epada BSD sed dan -rpada GNU sed), di BSD sed, tidak +juga \+(sama dengan ?) akan bekerja sama sekali, sedangkan di sed GNU Anda bisa buat mereka untuk bekerja dengan backslash. Oleh karena itu rekomendasi umum untuk menggunakan regex diperpanjang dalam skrip
Steven Lu
3
Halaman manual sed merujuk ke halaman manual re_format. Itu membuat 2 perbedaan: (1) usang dan ekspresi reguler yang diperluas; (2) ekspresi reguler tidak ditingkatkan versus ditingkatkan. Semua 4 kombinasi dimungkinkan. Ada dukungan sed untuk kedua usang dan diperpanjang, tetapi dalam kedua kasus hanya untuk non-ditingkatkan. Operator adalah fitur ekspresi reguler yang disempurnakan, oleh karena itu tidak didukung oleh sed.
Jawaban:
Karena sed bukan perl - regex sed tidak memiliki tulisan cepat
\d
:sed dokumentasi ekspresi reguler di sini .
sumber
/[[:digit:]]*\. /
akan cocok dengan stringfoo.
karena Anda mengizinkan nol digit. Jika Anda ingin satu atau lebih penggunaan\+
seperti yang ditunjukkanDua masalah:
sed
tidak mendukung\d
. Gunakan[0-9]
atau[[:digit:]]
.+
harus backslashed untuk mendapatkan arti khusus:\+
.sumber
interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).
Sedihnya, ini tidak membantu dengan masalah \ d ...-E
tidak berfungsi untuk GNU sed, ia digunakan-r
sebagai gantinya.sed
menyebalkan ketika datang ke portabilitas ...-E
pada BSD sed dan-r
pada GNU sed), di BSD sed, tidak+
juga\+
(sama dengan?
) akan bekerja sama sekali, sedangkan di sed GNU Anda bisa buat mereka untuk bekerja dengan backslash. Oleh karena itu rekomendasi umum untuk menggunakan regex diperpanjang dalam skripHalaman manual sed merujuk ke halaman manual re_format. Itu membuat 2 perbedaan: (1) usang dan ekspresi reguler yang diperluas; (2) ekspresi reguler tidak ditingkatkan versus ditingkatkan. Semua 4 kombinasi dimungkinkan. Ada dukungan sed untuk kedua usang dan diperpanjang, tetapi dalam kedua kasus hanya untuk non-ditingkatkan. Operator adalah fitur ekspresi reguler yang disempurnakan, oleh karena itu tidak didukung oleh sed.
sumber