Aku juga tidak. (Cygwin) Apakah Anda bermaksud memiliki \+? Apa artinya?
Eric Wilson
ya, saya menggunakan Ubuntu 10.04, menggunakan bash. Untuk BRE di grep Anda harus keluar dari beberapa karakter. Coba "Ekspresi Reguler Dasar vs Diperluas" di man grep.
Ankur Agarwal
2
@FarmBoy: +dalam regex berarti "satu atau lebih dari token sebelumnya". Dalam kasus ini, itu lolos karena itulah sintaks yang diperlukan oleh grepmesin regex default.
Daenyth
2
@FarmBoy: +perlu di-escape jika Anda menggunakan grep; jika Anda menggunakan egrep, tidak. grep -Esetara dengan egrep(setidaknya untuk versi GNU).
Keith Thompson
Jawaban:
196
grepMode default adalah (iirc) POSIX regex, dan \dpcre. Anda dapat meneruskan -Pke gnu grep, untuk ekspresi reguler seperti perl, atau gunakan [[:digit:]]sebagai gantinya \d.
Mode -E grep BSD mencakup \ d. Tetapi mode -E GNU grep tidak. Itu sangat mencolok, saya terkejut, saya baru menemukannya sekarang.
Keith Tyler
> Mode -E grep BSD menyertakan \ d. Tetapi mode -E GNU grep tidak. Itu sangat mencolok, saya terkejut, saya baru menemukannya sekarang. Ini hanya menggigit saya pada skrip validasi pesan git commit. Saya sangat terkejut \ d pelakunya.
\+
? Apa artinya?+
dalam regex berarti "satu atau lebih dari token sebelumnya". Dalam kasus ini, itu lolos karena itulah sintaks yang diperlukan olehgrep
mesin regex default.+
perlu di-escape jika Anda menggunakangrep
; jika Anda menggunakanegrep
, tidak.grep -E
setara denganegrep
(setidaknya untuk versi GNU).Jawaban:
grep
Mode default adalah (iirc) POSIX regex, dan\d
pcre. Anda dapat meneruskan-P
ke gnu grep, untuk ekspresi reguler seperti perl, atau gunakan[[:digit:]]
sebagai gantinya\d
.sumber
Coba ini
$ echo 'this 1 2 3' | grep '[0-9]\+'
sumber