Bagaimana saya bisa menggunakan grep untuk hanya menampilkan nama file di Linux?


1068

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

Saya biasanya menggunakan sesuatu seperti:

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

Bagaimana saya bisa mendapatkan nama file (dengan path), tetapi tanpa kecocokan? Apakah saya harus menggunakan xargs? Saya tidak melihat cara untuk melakukan ini di grephalaman manual saya .


3
Maksud Anda, Anda ingin nama file yang memiliki setidaknya satu kecocokan?
leonbloy

4
Pertanyaan yang bagus Saya sebenarnya mulai menggunakan ini untuk membuka daftar file yang dikembalikan oleh grep di Vim. vim $(grep -rl Something app/)
David Tuite

1
Anda tidak dapat membuat daftar file menggunakan perintah grep, ini pada dasarnya digunakan untuk mengambil teks yang diinginkan dari file atau daftar. Misalnya, ps aux | grep 'apt-get' atau grep 'text-to-find' / path / to / file /
iamjayp

Jawaban:


1625

Opsi standar grep -l(yaitu huruf kecil L) dapat 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 -Hdalam hal ini.


37
Dokumentasi opsi ini (seperti sering dalam kebanyakan file man) jadi tidak jelas! Pfff ... Luar biasa bagaimana pria bisa menjadi sakit di pantat.
MonsieurDart

1
-H juga menunjukkan pertandingan itu sendiri. Pertanyaannya hanya untuk nama file.
Hauke

@ Hauke ​​Dan jawaban saya adalah -l. Saya sebutkan -H hanya karena perintah pengguna dalam pertanyaan termasuk -H dan itu berlebihan ketika -l diberikan.
Random832

2
Bagus, saya pribadi suka menggunakan ini dengan flag lain grep -nrl "some text" .ketika mencari teks dalam satu set subfolder secara rekursif
openwonk

142

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

4
Berhenti pada pertandingan pertama adalah penting dan alami.
Thomson

7
dokumentasi membuatnya agak tidak jelas. "Pemindaian akan berhenti pada kecocokan pertama" - menunjukkan bahwa semua nama file akan dicetak, tetapi pemindaian untuk kata yang cocok akan berhenti pada kemunculan pertama.
TheMonkWhoSoldHisCode

2
@ VishalP: Karena kami tidak peduli di mana kemunculannya, hanya saja ada, tidak ada gunanya mencari setiap file di luar kemunculan pertama.
Ignacio Vazquez-Abrams

17
@ IgnacioVazquez-Abrams Tepat. Kesan pertama dokumen membuat Anda merasa hanya akan mencetak nama file dari file pertama. Anda benar-benar membutuhkan beberapa bacaan untuk memahaminya.
TheMonkWhoSoldHisCode

5
'Pemindaian file saat ini akan berhenti pada pertandingan pertama.' akan jauh lebih jelas.
sorrymissjackson

37

Untuk pencarian file sederhana, Anda dapat menggunakan grep -ldan -ropsi:

grep -rl "mystring"

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

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

The execdirpilihan membangun setiap perintah grep per setiap direktori, dan merangkai nama file menjadi hanya satu perintah ( +).


0

Pertanyaan Anda Bagaimana saya bisa mendapatkan nama-file saja (dengan path)

Contoh sintaks Anda ditemukan. -iname "* php" -exec grep -H myString {} \;

Saran perintah saya

sudo find /home -name *.php

Output dari perintah ini di OS Linux saya:

compose-sample-3 / html / mail / contact_me.php

Saat Anda membutuhkan nama file dengan path, selamat menikmati!


Pertanyaannya secara khusus menanyakan bagaimana mereka mendapatkan nama file menggunakan grep .
snakecharmerb
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.