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

Вы хотите использовать что-то, что является относительно главным к размеру Вашего набора. Тот путь, когда Вы циклично выполняетесь вокруг, Вы не закончите на тех же числах, которые Вы просто попробовали.

25
задан Stefan van den Akker 7 April 2016 в 08:10
поделиться

6 ответов

Как сказал Энди Уайт, вы должны использовать fgrep , чтобы соответствовать обычному . или избежать точек.

Итак, вы необходимо написать ( -тип f должен иметь только файлы: вам явно не нужны каталоги.):

find . -type f | xargs fgrep '...'

или если вы все еще хотите использовать grep:

find . -type f | xargs grep '\.\.\.'

И если вы только требуется текущий каталог , а не его подкаталоги:

find . -maxdepth 1 -type f | xargs fgrep '...'
38
ответ дан 28 November 2019 в 20:43
поделиться

@OP, если вы ищете файлы, содержащие ...,

grep -R "\.\.\." *
5
ответ дан 28 November 2019 в 20:43
поделиться

Если вы набираете буквально grep '...' , вы найдете практически любую строку. Я сомневаюсь, что вы действительно набираете '...' для своей команды grep, но если да, то ... будет соответствовать любым трем символам.

Пожалуйста, опубликуйте дополнительную информацию о том, что вы ищете, и, возможно, кто-нибудь сможет вам больше помочь.

2
ответ дан 28 November 2019 в 20:43
поделиться

'.'. соответствует любому символу, поэтому вы найдете все строки, содержащие 3 или более символа.

Вы можете либо экранировать точки, например так:

find . | xargs grep '\.\.\.'

Или вы можете использовать fgrep, который выполняет буквальное сопоставление вместо регулярного выражения match:

find . | xargs fgrep '...'

(Некоторые версии grep также принимают флаг -F, который заставляет их вести себя как fgrep.)

7
ответ дан 28 November 2019 в 20:43
поделиться

Если вы ищете подходящее имя файла , попробуйте:

find . -name "filename pattern" 

или

find . | grep "filename pattern"

Если вы ищете файлов , match (т.е. содержит строку grep)

find . | xargs grep "string pattern"

работает нормально. или просто:

grep "string pattern" -R *
1
ответ дан 28 November 2019 в 20:43
поделиться

Чтобы завершить ответ Джереми, вы можете также хочу попробовать

find . -type f | xargs grep 'your_pattern'

или

find . -type f -exec grep 'your_pattern' {} +

Что похоже на xargs

Я мог бы добавить: RTFM! Или более вежливо: использование и злоупотребление

man command

!

0
ответ дан 28 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: