您好,我正在使用此命令在 linux 的文件中查找文本
find ./ -type f -exec grep -l "Text To Find" {} \;
该命令工作正常,但我想自动打印包含文本的行,或者如果可能的话,文本上方的前两行和文本后面的两行。
此外,欢迎提出另一种查找文本和打印行而不是使用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" *
为什么不只是grep?
grep -r -C2 "Text To Find" *
您可以使用以下替代find
结构进行更快的搜索:
find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find"
grep
它不会为每个文件调用(这就是这样-exec ... {}
做的),而是grep
为一堆文件调用。
请注意,-print0
,-0
和-C2
选项不可移植(可以与find
,xargs
和grep
程序的 GNU 变体一起正常工作,即大多数 Linux、BSD 等安装以及 Cygwin 和 MinGW,但不要指望它们能与“较旧的”Solaris 一起工作, HPUX 等安装。)
要打印这些行(使用包含它的文件):
find . -type f -exec grep "text" {} /dev/null \;
要查看匹配的行后面的 2 行,请在-A2
上一行中的“grep”之后添加,-B2
对于之前的两行,以及-C2
两者。
find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';'