Ranh giới từ Grep


22

Tích lũy tài liệu GNU:

‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.

My / etc / fstab trông như thế này:

/dev/sdb1       /media/fresh      ext2   defaults     0 0

Tôi muốn grep trả lại TRUE / FALSE cho sự tồn tại của / media / Fresh. Tôi đã thử sử dụng \<\>nó không hoạt động. Tại sao?

egrep '\</media/fresh\>' /etc/fstab

Cách giải quyết:

egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab

Nhưng nó trông xấu hơn.

Grep của tôi là 2.5.1


4
Tôi cho rằng /không được coi là một ký tự từ, vì vậy regex sẽ không khớp - "\ b khớp với trước và sau một chuỗi chữ số" chính xác hơn là nói "trước và sau một từ"
Felipe Alvarez

Câu trả lời:


27

\<\>khớp chuỗi trống ở đầu và cuối của một từ tương ứng và chỉ các ký tự cấu thành từ là:

[[:alnum:]_]

Từ man grep:

Word-constituent characters are letters, digits, and the underscore.

Vì vậy, Regex của bạn không thành công vì /không phải là ký tự cấu thành từ hợp lệ.

Thay vào đó khi bạn có khoảng trắng xung quanh, bạn có thể sử dụng -wtùy chọn grepkhớp với một từ:

grep -wo '/media/fresh' /etc/fstab

Thí dụ:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh

Tôi số liệu nhiều như sau khi tôi đăng Câu hỏi của tôi. Bất kỳ đề nghị cho những gì tôi muốn đạt được?
Felipe Alvarez

@FelipeAlvarez Kiểm tra các chỉnh sửa của tôi ..
heemayl

1

Vấn đề này với \<(và cũng \b) không chỉ áp dụng /cho tất cả các ký tự không phải từ. (tức là các ký tự khác [[:alnum:]]_.)

Vấn đề là công cụ regex sẽ luôn bỏ qua một ký tự không phải từ như /khi tìm kiếm neo tiếp theo \<. Đó là lý do tại sao bạn không nên đặt các ký tự không phải từ như /sau \<. Nếu bạn làm, bằng cách xây dựng, không có gì sẽ phù hợp.

Một thay thế cho -wtùy chọn của grep, sẽ là một cái gì đó như thế này:

egrep "(^|\W)/media/fresh($|\W)"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.