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.