Как использовать grep для поиска текстовой строки в файлах в подпапках родительской папки без ключа -r

Как использовать grep для поиска текстовой строки в файлах в подпапках родительской папки без ключа -r

Я использую Solaris 10 и имею две grepверсии, одну в /usr/binи одну в /usr/xpg4/bin. Я искал ответ на вопрос, как искать текст в файлах внутри подпапок родительского каталога с помощью grep. Все ответы говорят о -rили -Rпереключателях, которые у меня отсутствуют в моей версии grep.

решение1

Стандартный синтаксис (POSIX) следующий:

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +

( /dev/nullчтобы убедиться, что grepвсегда печатается имя файла). Это будет работать на всех системах POSIX, включая Solaris. Единственные известные системы после 90-х, где это не работает, — это старые (сейчас очень старые) системы GNU.

Первоначально GNU ввел -print0предикат и -0опцию xargsвместо этого:

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null

Сейчас есть несколько других реализаций, которые это поддерживают, но не Solaris.

Выше, теоретически, вы хотели бы добавить -rопцию, чтобы избежать запуска, grepесли нет файла, но это не такпортативныйи в этом конкретном случае не имеет функционального значения

решение2

С помощью GNU grep(если установлен):

ggrep -A3 -B23 'word' -R /log/

Это проверит все файлы в папке на предмет wordсоответствия регулярному выражению и покажет вывод вместе с путем к файлу.

GNU grepподдерживает этот -Rфлаг.

решение3

Просто используйте ggrep, который в Solaris существует по /usr/sfw/bin/ggrepследующему пути:
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
он ищет ваш поисковый запрос в группе имен файлов, начинающихся с определенного слова.

Связанный контент