Как я могу использовать grep для отображения только имен файлов (без встроенных совпадений) в Linux?
Как я могу использовать grep
, чтобы показывать только имена файлов (без встроенных совпадений) в Linux?
Я обычно использую что-то вроде:
find . -iname "*php" -exec grep -H myString {} \;
Как я могу просто получить имена файлов (с путями), но без совпадений? Нужно ли использовать xargs
? Я не видел способа сделать это на моей странице grep
.
Ответы
Ответ 1
Стандартная опция grep -l
(это строчная буква L) может сделать это.
Из 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.
В этом случае вам также не нужно -H
.
Ответ 2
На странице grep(1)
man:
-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.)
Ответ 3
Для простого поиска файлов вы можете использовать опции grep -l
и -r
:
grep -rl "mystring"
Весь поиск выполняется grep. Конечно, если вам нужно выбрать файлы по другому параметру, найдите правильное решение:
find . -iname "*.php" -execdir grep -l "mystring" {} +
Параметр execdir
создает каждую команду grep для каждого каталога и объединяет имена файлов только в одну команду (+
).