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

Использование grep для поиска файлов, предоставляемых find: что не так с find. | xargs grep '...'?

Когда я использую команду:

find . | xargs grep '...'

Я получаю неправильные совпадения. Я пытаюсь найти строку ... во всех файлах в текущей папке.

4b9b3361

Ответ 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! Или более вежливо: использование и злоупотребление

man command

!