Apakah \ d tidak didukung oleh ekspresi dasar grep?


119

Ini tidak menghasilkan keluaran apa pun. Bagaimana bisa?

$ echo 'this 1 2 3' | grep '\d\+'

Tapi ini lakukan:

$ echo 'this 1 2 3' | grep '\s\+'
this 1 2 3

$ echo 'this 1 2 3' | grep '\w\+'
this 1 2 3

2
Tidak ada yang berhasil untuk saya (Solaris).
spraff

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.

daenyth@Bragi ~ $ echo 1 | grep -P '\d'
1
daenyth@Bragi ~ $ echo 1 | grep '[[:digit:]]'
1

10
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.
austinbruch

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.