Pertanyaan Bagaimana saya bisa menggunakan grep untuk menunjukkan hanya nama file (tidak ada pertandingan in-line) di Linux?


Bagaimana saya bisa menggunakan grep untuk menunjukkan hanya nama-nama file (tidak ada pertandingan in-line) di Linux?

Saya biasanya menggunakan sesuatu seperti:

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

Bagaimana saya bisa mendapatkan nama file (dengan jalur), tetapi tanpa kecocokan? Apakah saya harus menggunakannya xargs? Saya tidak melihat cara untuk melakukan ini pada saya grep halaman manual.


748
2017-07-09 22:24


asal


Jawaban:


Opsi standar grep -l (Itu huruf kecil L) bisa melakukan ini.

Dari Standar 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.

Anda juga tidak perlu -H pada kasus ini.


1128
2017-07-09 22:26



Dari grep(1) halaman manual:

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

101
2017-07-09 22:26



Untuk pencarian file sederhana Anda bisa menggunakan grep's -l dan -r pilihan:

grep -rl "mystring"

Semua pencarian dilakukan dengan grep. Tentu saja, jika Anda perlu memilih file pada beberapa parameter lainnya, temukan adalah solusi yang benar:

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

Itu execdir opsi membangun setiap perintah grep setiap direktori, dan menggabungkan nama file menjadi hanya satu perintah (+).


23
2017-09-08 17:23