grep regex perilaku spasi


90

Saya memiliki file teks, berisi sesuatu seperti:

12,34 EUR 
 5,67 EUR
 ...

Ada satu spasi sebelum 'EUR' dan saya mengabaikan 0, XX EUR.

Saya mencoba:

grep '[1-9][0-9]*,[0-9]\{2\}\sEUR' => didn't match !

grep '[1-9][0-9]*,[0-9]\{2\} EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s*EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s[E]UR' => worked !

Bisakah seseorang menjelaskan kepada saya, tolong, mengapa saya tidak bisa menggunakan \stapi \s*dan \s[E]cocok?

OS: Ubuntu 10.04, grep v2.5

Jawaban:


124

Ini terlihat seperti perbedaan perilaku dalam penanganan \santara grep 2.5 dan versi yang lebih baru (bug di grep lama?). Saya mengkonfirmasi hasil Anda dengan grep 2.5.4, tetapi keempat grep Anda berfungsi saat menggunakan grep 2.6.3 (Ubuntu 10.10).

catatan:

GNU grep 2.5.4
echo "foo bar" | grep "\s"
   (doesn't match)

sedangkan

GNU grep 2.6.3
echo "foo bar" | grep "\s"
foo bar

Mungkin lebih sedikit masalah (seperti \syang tidak didokumentasikan):

Both GNU greps
echo "foo bar" | grep "[[:space:]]"
foo bar

Saran saya adalah untuk menghindari menggunakan \s... penggunaan [ \t]*atau [[:space:]]atau sesuatu seperti itu sebagai gantinya.


24
Atau hanya [:space:]untuk mantan. seperti ini:cat file | grep "[[:space:]]"
Kiril Kirov

tampaknya ini adalah bug di versi grep yang lebih baru (sudut pandang lain) menurut permintaan bug ini mail-archive.com/bug-grep@gnu.org/msg02686.html tetapi mengapa pernyataan terakhir cocok?
Milde

1
@Milde, perhatikan posting tindak lanjut mail-archive.com/bug-grep@gnu.org/msg02689.html di mana laporan bug itu ditandai tidak valid dan ditutup (jadi ini tidak dianggap sebagai bug di grep yang lebih baru).
Kamal

2
@Milde, tidak ada dokumentasi grep yang saya periksa (lama atau baru) yang benar-benar merujuk \ssama sekali. Saya akan mengatakan perilakunya "tidak ditentukan". Gunakan [: spasi:] sebagai gantinya, yang berfungsi seperti yang didokumentasikan di grep lama dan baru.
Kamal

terima kasih, saya akan menggunakan [: spasi:] di masa mendatang untuk menghindari masalah
Milde
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.