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

StackOverflow https://stackoverflow.com/questions/1204781

Вопрос

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

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

!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top