6

您好,我正在使用此命令在 linux 的文件中查找文本

find ./ -type f -exec grep -l "Text To Find" {} \;

该命令工作正常,但我想自动打印包含文本的行,或者如果可能的话,文本上方的前两行和文本后面的两行。

此外,欢迎提出另一种查找文本和打印行而不是使用find的建议,

提前非常感谢。

4

5 回答 5

16
find ./ -type f -exec grep -Hn "Text To Find" {} \;

使用 -A 和 -B 标志来打印匹配前后的行:

find ./ -type f -exec grep -Hn -A1 -B1 "Text To Find" {} \;

你也可以只使用grep:

grep -R -Hn -A1 -B1 "Text To Find" *
于 2009-02-20T23:04:38.013 回答
4

为什么不只是grep?

grep -r -C2 "Text To Find" *
于 2009-02-20T23:04:50.447 回答
3

您可以使用以下替代find结构进行更快的搜索:

find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find"

grep它不会为每个文件调用(这就是这样-exec ... {}做的),而是grep为一堆文件调用。

请注意,-print0,-0-C2选项不可移植(可以与find,xargsgrep程序的 GNU 变体一起正常工作,即大多数 Linux、BSD 等安装以及 Cygwin 和 MinGW,但不要指望它们能与“较旧的”Solaris 一起工作, HPUX 等安装。)

于 2009-02-20T23:15:29.733 回答
1

要打印这些行(使用包含它的文件):

find . -type f -exec grep "text" {} /dev/null \;

要查看匹配的行后面的 2 行,请在-A2上一行中的“grep”之后添加,-B2对于之前的两行,以及-C2两者。

于 2009-02-20T23:08:12.357 回答
1
find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';'
于 2009-02-20T23:08:48.813 回答