Подтвердить что ты не робот

Укажите имена файлов на основе шаблона имени файла и содержимого файла?

Как я могу использовать команду Grep для поиска file name на основе wild card "LMN2011*", перечисляющего все файлы с этим как начало?

Я хочу добавить еще одну проверку этих файлов.

Если file content имеет нечто вроде

LMN20113456

Могу ли я использовать GREP для этого?

Grep -ls "LMN2011*"   "LMN20113456"

Каким образом можно искать имена файлов и их содержимое с помощью команд оболочки?

4b9b3361

Ответ 1

Grep НЕ использует "подстановочные знаки" для поиска - это оболочка, как *.jpg. Grep использует "регулярные выражения" для сопоставления с образцом. В то время как в оболочке '*' означает "что угодно", в grep это означает "соответствовать предыдущему элементу ноль или более раз".

Больше информации и примеров здесь: http://www.regular-expressions.info/reference.html

Чтобы ответить на ваш вопрос - вы можете найти файлы, соответствующие некоторому шаблону с помощью grep:

find /somedir -type f -print | grep 'LMN2011' # that will show files whose names contain LMN2011

Затем вы можете искать их содержание (без учета регистра):

find /somedir -type f -print | grep -i 'LMN2011' | xargs grep -i 'LMN20113456'

Если пути могут содержать пробелы, вы должны использовать функцию "нулевого конца":

find /somedir -type f -print0 | grep -iz 'LMN2011' | xargs -0 grep -i 'LMN20113456'

Ответ 2

Это можно сделать без find, используя параметр grep "--include".

grep man говорит:

--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).

Итак, чтобы сделать рекурсивный поиск строки в файле, соответствующем определенному шаблону, он будет выглядеть примерно так:

grep -r --include=<pattern> <string> <directory>

Например, для рекурсивного поиска строки "mytarget" во всех файлах Makefile:

grep -r --include="Makefile" "mytarget" ./

Или искать во всех файлах, начинающихся с "Сделать" в имени файла:

grep -r --include="Make*" "mytarget" ./

Ответ 3

grep LMN20113456 LMN2011*

или если вы хотите искать рекурсивно через подкаталоги:

find . -type f -name 'LMN2011*' -exec grep LMN20113456 {} \;

Ответ 4

find/folder -type f -mtime -90 | grep -E "(.txt |.php |.inc |.root |.gif)" | xargs ls -l > WWWlastActivity.log

Ответ 5

Предположим, что файлы LMN2011* находятся внутри /home/me, но пропускают что-либо в /home/me/temp или ниже:

find /home/me -name 'LMN2011*' -not -path "/home/me/temp/*" -print | xargs grep 'LMN20113456'