Шукайте рядок рекурсивно, перебуваючи в поточному каталозі


15

Я хочу шукати всі файли рекурсивно з каталогу, в якому я перебуваю, для певного рядка.

я намагався

grep -r -i my_string

і я спробував це в тестовій папці з двома крихітними файлами, але рядок він не знайде.

Крім того, чи існує якийсь особливий спосіб визначення "містить", а не зіставлення цілого слова?


3
Спробуйте grep -r -o -i "your_string" *(з "цитатами")
pl1nk

Я отримую декілька повідомлень, у яких відмовлено у дозволі, чи просто ігнорує ці файли, але продовжувати перевірку решти?
Девід

Правильно, ці файли ігноруються.
pl1nk

Відповіді:


27

Ви шукаєте ім'я файлу чи слово всередині файлу? grep здійснює пошук всередині файлів, що, здається, саме те, що ви хочете.

grep використовує регулярні вирази - насправді саме це і є частиною "re". Таким чином, він не використовує звичайні баш-карти; тобто abc*не знайшлося б слів, що починаються з abc, воно знайде слова, що починаються з ab, а потім до нуля або більше c. Але так, якщо ви просто даєте йому шаблон, він знайде його де завгодно, не знаючи цілих слів. Якщо ви хочете знайти цілі слова, вам потрібно створити регулярний вираз, щоб сказати це.

Але, як і більшість команд, вам потрібно поставити ім'я файлів у кінці команди, щоб ваш приклад просто сидів там і чекав імені файлу.

Як сказав @plink, використовуйте

grep -r -o -i "your_string" *

(або *.*, або інший filepec). Помилки можна ігнорувати. Якщо у вас багато помилок, ви можете додати 2>/dev/nullїх до кінця, що перенаправить stderr на нульовий пристрій.


6
Для тих, хто цікавиться: -r означає рекурсивний (тобто він виглядає в поточній папці та ВСІ папки в поточній папці І всі папки в цій папці ..... до нескінченності), -o означає, що він не показує весь рядок, і -i випадок ігнорування.
BKSpurgeon

@johnsnails Зворотний вибір не потрібен. Більше ймовірно, що це помилка форматування на Stack Exchange під час публікації як блок вбудованого коду.
tom_mai78101

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