Làm cách nào để hiển thị tên tệp chỉ sau khi tìm kiếm grep từ khóa?


15

Tôi hiện có n tệp dữ liệu trong một thư mục trong đó mỗi tệp có tối đa 1 dòng dữ liệu rất dài. Cấu trúc thư mục của tôi là

director/
    data1.json
    data2.json
    data3.json

Tôi biết rằng ít nhất một trong số các tệp đó chứa từ khóa tôi đang tìm, nhưng vì một dòng dữ liệu quá dài, nó bao phủ toàn bộ thiết bị đầu cuối của tôi. Làm cách nào để tôi có được tên tệp chỉ sau khi thực hiện từ khóa grep? Lệnh grep tôi đang sử dụng là:

grep keyword *.json

Câu trả lời:


30

Đối số -l nên làm những gì bạn muốn.

   -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

7

Bạn có thể sử dụng xargs kết hợp với --null với grep hoặc --print0 với ack. Tôi thấy rằng tốc độ ack là nhanh hơn.

grep -lr --null searchterm * | xargs -I {} -0 echo {}

ack -lr --print0 searchterm * | xargs -I {} -0 echo {}

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.