Может быть, вопрос был путаным, я надеюсь, что теперь его ясно, patten должен соответствовать содержимому, а не имени файла!
Ваш вопрос не ясен, и в оригинальный ответ я показал, как найти имена файлов соответствие шаблону. Если вы хотите искать файлы с контентом, соответствующих шаблон, это так просто, как
grep 'pattern' directory/*
(подстановка оболочки используется).
Вы можете использовать find
, чтобы отфильтровать файлы перед переходом к grep
:
find 'directory' -maxdepth 1 -mindepth 1 -type f \
-exec grep --with-filename 'pattern' {} +
Оригинал ответа
Grep не подходящим инструментом для поиска имен файлов, так как вам нужно, чтобы создать список файлы перед переходом на Grep. Даже если вы получите желаемые результаты с помощью команды ls | grep pattern
, вам придется добавить еще один канал для обработки файлов (я думаю, вам, скорее всего, придется как-то их обработать, рано или поздно).
Вместо этого используйте find
, так как он имеет свои собственные мощные функции, соответствующие шаблону.
Пример:
find 'directory' -maxdepth 1 -mindepth 1 -regex '.*pattern'
Использование -iregex
для случая нечувствительной версии -regex
. Также читайте о -name
, -iname
, -path
и -ipath
.
Можно выполнить команду (или скрипт) для файлов, обрабатываются с -exec
действия, например:
find 'directory' -maxdepth 1 -mindepth 1 -type f \
-regex '.*pattern' -exec sed -i.bak -r 's/\btwo\b/2/g' {} +
'найти.-type f -name '* pattern *' ' –
Они будут изучать все файлы в пути для' pattern'. Я думаю, это не то, что вы пытаетесь сделать. 'find' или' ls ... | grep' будет полезен – nu11p01n73R
, если вы все еще хотите использовать grep try 'grep/path/to/something/* -d skip -le" pattern "' – bansi