Tìm kiếm một mẫu văn bản trong linux


20

Tôi là một người mới chơi linux. Tôi cần tìm kiếm một chuỗi "chuỗi thử nghiệm" trong tất cả các tệp * .java dưới / home / user1 / (bao gồm cả các thư mục con). Làm thế nào tôi có thể làm điều đó trong linux thông qua lệnh shell.


Đã có một số câu hỏi liên quan đến các tệp tìm kiếm regex trong các thư mục con từ dòng lệnh
RobotHumans

một tìm kiếm nhanh đã đưa ra câu hỏi này: superuser.com/questions/208271/ không chính xác những gì bạn đang tìm kiếm, nhưng thay vì thực hiện cp, bạn có thể cat / grep bất cứ điều gì
RobotHumans

Tôi có thể liệt kê tệp có phần mở rộng với find / home / user1 -name * .java Làm thế nào để sử dụng grep trên đó?
darthvader

Câu trả lời:


23

Cách dễ nhất là sử dụng các tính năng của GNU grep:

grep -r --include '*.java' teststring /home/user1

Nếu bạn đã từng sử dụng một biến thể unix khác không có GNU grep, thì đây là một cách di động:

find /home/user1 -name '*.java' -exec grep teststring {} +

thật tuyệt khi không biết về tính năng grep này
RobotHumans

1
Nếu bạn đang tìm kiếm thư mục hiện tại và tất cả các tệp thì nógrep -r teststring .
Chris Moschini

4

sử dụng ack bạn chỉ cần gõ:cd /home/user01 && ack --java teststring


1
hoặcack --java teststring /home/user01
Andy Lester

4

Đối với ack aka ack-grep, đây là ứng dụng sát thủ trong tâm trí tôi;)

Bạn có thể ack some_string /in/path_ytìm some_ String trong path_y Hoặc đơn giản hơn ack some_other_stringđể tìm some_other_sting trong thư mục hiện tại.


2

Tìm thấy rồi. Đăng nó vì nó có thể giúp một ai đó.

find /home/user01 -name *.java | xargs grep "teststring"

Vui lòng sửa nếu có cách nào tốt hơn.


3
Nói chung, bạn nên sử dụng -print0-0khi đường ống findvào xargshoạt động chính xác với các tệp có thể có dấu cách hoặc dòng mới trong tên của chúng:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
Tạm dừng cho đến khi có thông báo mới.

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.