你好,我正在使用这个命令来查找文件在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
选项是不可移植的(对于find
, xargs
和grep
程序的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" '{}' ';'