如何使用 grep 在不使用 -r 开关的情况下在父文件夹的子文件夹中的文件中查找文本字符串

如何使用 grep 在不使用 -r 开关的情况下在父文件夹的子文件夹中的文件中查找文本字符串

我使用的是 Solaris 10,有两个grep版本,一种是 in /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,并将显示输出和文件路径。

GNUgrep支持该-R标志。

答案3

只需使用 ggrep,它在Solaris上存在于/usr/sfw/bin/ggrep这样的路径上:
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
它在一组以特定单词开头的文件名上搜索您的搜索词。

相关内容