Làm cách nào tôi có thể sử dụng grep để chỉ hiển thị tên tệp trên Linux?


1068

Làm cách nào tôi có thể sử dụng grepđể chỉ hiển thị tên tệp (không khớp trong dòng) trên Linux?

Tôi thường sử dụng một cái gì đó như:

find . -iname "*php" -exec grep -H myString {} \;

Làm cách nào tôi có thể nhận được tên tệp (có đường dẫn), nhưng không có kết quả khớp? Tôi có phải sử dụng xargskhông? Tôi đã không thấy một cách để làm điều này trên greptrang người đàn ông của tôi .


3
Ý bạn là, bạn muốn tên tập tin có ít nhất một trận đấu?
leonbloy

4
Câu hỏi tuyệt vời. Tôi thực sự bắt đầu sử dụng điều này để mở danh sách các tệp được trả về bởi grep trong Vim. vim $(grep -rl Something app/)
David Tuite

1
Bạn không thể liệt kê các tệp bằng lệnh grep, về cơ bản nó được sử dụng để tìm nạp văn bản mong muốn từ một tệp hoặc danh sách. Ví dụ: ps phụ | grep 'apt-get' hoặc grep 'text-to-find' / path / to / file /
iamjayp 17/03/17

Câu trả lời:


1625

Tùy chọn tiêu chuẩn grep -l(đó là chữ thường L) có thể làm điều này.

Từ tiêu chuẩn Unix :

-l
    (The letter ell.) Write only the names of files containing selected
    lines to standard output. Pathnames are written once per file searched.
    If the standard input is searched, a pathname of (standard input) will
    be written, in the POSIX locale. In other locales, standard input may be
    replaced by something more appropriate in those locales.

Bạn cũng không cần -Htrong trường hợp này.


37
Tài liệu của tùy chọn này là (như thường thấy trong hầu hết các tệp người đàn ông) nên không rõ ràng! Pfffật Tuyệt vời làm thế nào người đàn ông có thể là một cơn đau ở mông.
Monsieur Bắt đầu

1
-H cũng cho thấy các trận đấu chính họ. Câu hỏi chỉ dành cho tên tập tin.
Hauke

@Hauke ​​Và câu trả lời của tôi là -l. Tôi đã đề cập -H chỉ vì lệnh của người dùng trong câu hỏi bao gồm -H và nó là dư thừa khi -l được đưa ra.
Random832

2
Thật tuyệt, cá nhân tôi thích sử dụng điều này với các cờ khác grep -nrl "some text" .khi tìm kiếm văn bản trong một tập hợp các thư mục con theo cách đệ quy
openwonk

142

Từ grep(1)trang người đàn ông:

  -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.)

4
Dừng lại ở trận đấu đầu tiên là cần thiết và tự nhiên.
Thomson

7
các tài liệu làm cho nó một chút không rõ ràng. "Quá trình quét sẽ dừng ở lần khớp đầu tiên" - cho biết rằng tất cả các tên tệp sẽ được in, nhưng quá trình quét tìm từ phù hợp sẽ dừng ở lần xuất hiện đầu tiên.
TheMonkWhoSoldHisCode

2
@VishalP: Vì chúng tôi không quan tâm đến sự xuất hiện ở đâu, chỉ có chúng tồn tại, không có điểm nào trong việc tìm kiếm từng tệp ngoài lần xuất hiện đầu tiên.
Ignacio Vazquez-Abrams

17
@ IgnacioVazquez-Abrams Chính xác. Ấn tượng đầu tiên của tài liệu khiến bạn cảm thấy rằng nó sẽ chỉ in tên tệp của tệp đầu tiên. Bạn thực sự cần một vài lần đọc để hiểu nó.
TheMonkWhoSoldHisCode

5
'Quá trình quét tệp hiện tại sẽ dừng ở trận đấu đầu tiên.' sẽ rõ ràng hơn nhiều
xin lỗimissjackson

37

Đối với một tìm kiếm tệp đơn giản, bạn có thể sử dụng grep's -l-rcác tùy chọn:

grep -rl "mystring"

Tất cả các tìm kiếm được thực hiện bởi grep. Tất nhiên, nếu bạn cần chọn tệp trên một số tham số khác, find là giải pháp chính xác:

find . -iname "*.php" -execdir grep -l "mystring" {} +

Các execdirtùy chọn xây dựng mỗi lệnh grep cho mỗi thư mục, và concatenates tên tập tin vào chỉ có một lệnh ( +).


0

Câu hỏi của bạn Làm thế nào tôi có thể nhận được tên tệp (có đường dẫn)

Ví dụ cú pháp của bạn tìm thấy. -iname "* php" -exec grep -H myString {} \;

Đề nghị lệnh của tôi

sudo find /home -name *.php

Đầu ra từ lệnh này trên HĐH Linux của tôi:

soạn-mẫu-3 / html / mail / contact_me.php

Khi bạn yêu cầu tên tệp với đường dẫn, hãy tận hưởng!


Câu hỏi đặc biệt hỏi làm thế nào họ có được tên tệp bằng grep .
snakecharmerb
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.