
Я использую 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>*
он ищет ваш поисковый запрос в группе имен файлов, начинающихся с определенного слова.