Làm thế nào để bao gồm một nhân vật không gian với grep?


17

Tôi có một tập tin tên là ví dụ

$ cat example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

và khi tôi sử dụng grepđể có được dòng có khoảng trắng trước đó .pdf, tôi dường như không thể có được nó.

grep *.pdf example

trả về không có gì, (tôi muốn nói, "grep, khớp 0 hoặc nhiều khoảng trắng trước .pdf", nhưng không có kết quả)

và nếu tôi sử dụng:

grep i*.pdf example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

tất cả các dòng trở lại, bởi vì tôi đang nói "grep, khớp với tôi imột hoặc không lần nào, ok."

và cuối cùng:

grep " *.pdf" example

không có kết quả trả về

Đối với mẫu này, tôi muốn xem

grep .pdf 

như đầu ra

Điều gì là sai với suy nghĩ của tôi?

Câu trả lời:


31

Hãy chắc chắn rằng bạn trích dẫn biểu hiện của bạn. Tôi nghĩ rằng shell words là một trong những vấn đề của bạn ở đây, nhưng bạn nên luôn trích dẫn regex của mình, vì tất cả các loại điều sẽ xảy ra nếu không.

$ grep ' \.pdf' example
grep .pdf

Hoặc nếu có thể có nhiều khoảng trắng (chúng tôi không thể sử dụng *vì điều này sẽ khớp với các trường hợp không có khoảng trắng trước)

grep ' \+\.pdf' example

+có nghĩa là "một hoặc nhiều ký tự trước". Trong BRE, bạn cần thoát khỏi nó \để có được chức năng đặc biệt này, nhưng thay vào đó bạn có thể sử dụng ERE để tránh điều này

grep -E ' +\.pdf' example 

Bạn cũng có thể sử dụng \strong grepđể có nghĩa là một không gian

grep '\s\+\.pdf' example

Chúng ta nên thoát theo nghĩa đen .bởi vì trong regex .có nghĩa là bất kỳ ký tự nào, trừ khi nó thuộc lớp nhân vật.


Bạn là người đầu tiên nhận thấy rằng dòng cuối cùng có không gian.
Pilot6

@ Pilot6 cảm ơn. Câu hỏi được viết hơi khó hiểu :)
Zanna

Cần có một số huy hiệu cho người đầu tiên hiểu câu hỏi ;-)
Pilot6

@Zanna, có gì sai khi đi bất cứ lúc nào egrep trong trường hợp này? egrep luôn giúp bạn có lợi thế ...
solfish

@solfish egreplà (về phong cách regex, afaik) giống như grep -E, và tôi tin rằng chúng ta có nghĩa là sử dụng cái sau - egrepv.v ... được cho là không dùng để ủng hộ các greplá cờ
Zanna
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.