2010-05-21 27 views
44

Tôi đang sử dụng lệnh sau để grep thứ trong subdirsLàm thế nào để grep cho toàn bộ từ

find . | xargs grep -s 's:text' 

Tuy nhiên, điều này cũng tìm thấy những thứ như thế <s:textfield name="sdfsf"...../>

tôi có thể làm gì để tránh điều đó nên nó chỉ tìm thấy những thứ như thế <s:text name="sdfsdf"/>

HOẶC cho rằng vấn đề .... cũng thấy <s:text somethingElse="lkjkj" name="lkkj"

cơ bản s:textname phải ở trên cùng một dòng ....

+17

Có ai đọc tiêu đề là "làm thế nào để grep cho toàn bộ thế giới ** **"? – Earlz

+1

cho lulz :) – josh

+7

@Earlz, không, chủ yếu là vì tôi Googled "grep toàn bộ từ". –

Trả lời

49

Bạn muốn tùy chọn -w để chỉ định rằng đó là kết thúc của một từ.

find . | xargs grep -sw 's:text'

0

Nếu bạn chỉ muốn lọc phần văn bản còn lại, bạn có thể thực hiện việc này.

xargs grep -s 's:text '

này nên tìm chỉ s:text hợp với một không gian sau khi t ngoái. Nếu bạn cần tìm các trường hợp s:text chỉ có phần tử tên, hãy kết quả của bạn thành một biểu thức grep khác hoặc sử dụng regex để chỉ lọc các phần tử bạn cần.

+0

nếu "văn bản" ở cuối đầu ra thì sao? Nó sẽ không được bỏ qua trong giải pháp của bạn? – pkuszewski

22

Bạn có thể thả các lệnh xargs bằng cách tìm kiếm grep đệ quy. Và bạn thường không cần cờ 's'. Do đó:

grep -wr 's:text' 
23

Sử dụng \b để khớp với "ranh giới từ", điều này sẽ làm cho tìm kiếm của bạn đối sánh với toàn bộ từ.

Vì vậy, grep của bạn sẽ trông giống như

grep -r "\bSTRING\b" 

thêm màu sắc và dòng số có thể giúp quá

grep --color -rn "\bSTRING\b" 

Từ http://www.regular-expressions.info/wordboundaries.html:

Có ba vị trí khác nhau mà đủ điều kiện như ranh giới từ:

  • Trước ký tự đầu tiên trong chuỗi, nếu ký tự đầu tiên là ký tự từ .
  • Sau ký tự cuối cùng trong chuỗi, nếu ký tự cuối cùng là một ký tự từ.
  • Giữa hai ký tự trong chuỗi, trong đó một ký tự là một từ và ký tự kia không phải là một ký tự từ.
0

bạn có thể thử rg, https://github.com/BurntSushi/ripgrep:

rg -w 's:text' . 

nên làm điều đó

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ review/low-quality-posts/17780631) –

+1

Tôi đã cung cấp câu trả lời: rg -w 's: text'. – ms4720

Các vấn đề liên quan