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