Frage Wie kann ich grep verwenden, um nur Dateinamen (keine Inline-Übereinstimmungen) unter Linux anzuzeigen?


Wie kann ich verwenden? grep um unter Linux nur Dateinamen (keine Inline-Matches) anzuzeigen?

Ich verwende normalerweise etwas wie:

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

Wie bekomme ich nur die Dateinamen (mit Pfaden), aber ohne die Übereinstimmungen? Muss ich benutzen? xargs? Ich habe keinen Weg gesehen, dies auf meinem Weg zu tun grep Man Seite.


748
2017-07-09 22:24


Ursprung


Antworten:


Die Standardoption grep -l (das ist ein Kleinbuchstabe L) könnte dies tun.

Von dem Unix-Standard:

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

Du brauchst es auch nicht -H in diesem Fall.


1128
2017-07-09 22:26



Von dem grep(1) man seite:

  -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



Für eine einfache Dateisuche können Sie greps verwenden -l und -r Optionen:

grep -rl "mystring"

Die gesamte Suche wird von grep ausgeführt. Wenn Sie Dateien auf einem anderen Parameter auswählen müssen, ist find natürlich die richtige Lösung:

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

Das execdir Option erstellt jeden grep-Befehl für jedes Verzeichnis und verkettet Dateinamen in nur einem Befehl (+).


23
2017-09-08 17:23