Рекурсивний пошук тексту з шаблонами grep і file


46

З огляду на цей приклад структури папки:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

Як здійснити рекурсивний пошук тексту у всіх *.txtфайлах з grep"/"?

( "grep -r <pattern> *.txt"не працює при запуску з "/", оскільки .txtв цій папці немає файлів.)

Відповіді:


61

Моя версія GNU Grep має перемикач для цього:

grep -R --include='*.txt' $Pattern

Описується так:

--include=GLOB

Шукайте лише у файлах, базове ім’я яких відповідає GLOB (використовуючи відповідність підстановочних кодів, як описано в --exclude).


19

Якщо у вас є велика кількість файлів, було б корисно включити xargs в команду, щоб уникнути помилки "Аргумент занадто довгий".

find . -name '*.txt' -print | xargs grep <pattern>

6
Якщо в будь-якому з назв файлів чи каталогів є пробіли, скористайтеся цією формою: find. -ім'я '* .txt' -print0 | xargs -0 grep <pattern>
Джейсон Лютер

2
І звичайно, тут починається питання з іменами файлів -.
TJ Crowder

grepшвидше find.
Набі КАЗ

2

Ви могли б бути в змозі використати ваш zsh«S EXTENDED_GLOBваріанту ( документи )

grep <pattern> **/*.txt

Тільки якщо OP використовує zsh, але все ж цікаво.
Закон29


0
find . -name '*.txt' -type f -exec grep <pattern> {} \;

ви можете використовувати "find. -name '* .txt" -типу f -exec grep <pattern> {} + ", щоб він поводився подібним до перегляду від Марка Робінсона - працює тільки з GNU знайти наскільки мені відомо
serverhorror

0

Відповідь Манніса передбачає новий греп-процес для кожного текстового файлу. Якщо у вас багато текстових файлів, ви можете спробувати спершу зібрати кожен файл і вибрати .txt-файли, коли це зроблено:

grep -r <pattern> * | grep \.txt:

Це більш інтенсивно на диску, але все одно може бути швидшим.


0

Настав 2019 рік, і немає жодного способу я би все-таки використовував греп для рекурсивного пошуку тексту.

Сьогоднішні відповіді ІМХО повинні включати в себе розрив :

rg <pattern> -ttxt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.