如何在Linux中使用find来打印与我的文本匹配的行?

你好,我正在使用这个命令来查找文件在Linux中的文本

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

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

还有另一个build议,find文本和打印行,而不是使用查找是值得欢迎的,

非常感谢。

 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" * 

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

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

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

请注意, -print0-0-C2选项是不可移植的(对于findxargsgrep程序的GNU变体,也就是大多数Linux,BSD等)以及Cygwin和MinGW都可以正常工作,但是不要期望他们与“旧”的Solaris,HPUX等安装。)

为什么不只是grep?

 grep -r -C2 "Text To Find" * 

打印行(包含它的文件):

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

在上面的行中查看“grep”后面加上-A2的行之后的两行,之前两行中的-B2 ,以及两个行中的-C2

 find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';'