Когда я использую команду:
find . | xargs grep '...'
Я получаю неправильные совпадения. Я пытаюсь найти строку ...
во всех файлах в текущей папке.
Когда я использую команду:
find . | xargs grep '...'
Я получаю неправильные совпадения. Я пытаюсь найти строку ...
во всех файлах в текущей папке.
Как сказал Энди Уайт, вы должны использовать fgrep
, чтобы соответствовать простой .
, или избегать точек.
Итак, вы должны писать (-type f
должен иметь только файлы: вам явно не нужны каталоги.):
find . -type f | xargs fgrep '...'
или если вы все еще хотите использовать grep:
find . -type f | xargs grep '\.\.\.'
И если вам нужен только текущий каталог, а не его поддиры:
find . -maxdepth 1 -type f | xargs fgrep '...'
'' соответствует любому символу, поэтому вы будете находить все строки, содержащие 3 или более символов.
Вы можете либо избежать точек, например:
find . | xargs grep '\.\.\.'
Или вы можете использовать fgrep, который выполняет буквенное совпадение вместо соответствия регулярному выражению:
find . | xargs fgrep '...'
(Некоторые версии grep также принимают флаг -F, который заставляет их вести себя как fgrep.)
@OP, если вы ищете файлы, содержащие...,
grep -R "\.\.\." *
Если вы буквально печатаете grep '...'
, вы будете соответствовать любой строке. Я сомневаюсь, что вы на самом деле печатаете '...'
для своей команды grep, но если вы, то ...
будет соответствовать любым трем символам.
Пожалуйста, напишите больше информации о том, что вы ищете, и, возможно, кто-то может помочь вам больше.
Если вы ищете подходящее имя файла, попробуйте:
find . -name "filename pattern"
или
find . | grep "filename pattern"
Если вы ищете поиск файлов, которые соответствуют (т.е. содержат строку grep)
find . | xargs grep "string pattern"
работает отлично. или просто:
grep "string pattern" -R *
Чтобы выполнить ответ Джереми, вы также можете попробовать
find . -type f | xargs grep 'your_pattern'
или
find . -type f -exec grep 'your_pattern' {} +
Что похоже на xargs
Могу добавить: RTFM! Или более вежливо: использование и злоупотребление
man command
!