如何在特定文件类型中搜索特定文本?[重复]


13

可能重复:
如何在源文件中grep某些文本?

在当前目录下递归搜索特定文件类型中的特定文本的命令是什么?


您要退还什么?文本所在的行?文本所在文件的名称?
2011年

@MaQleod:如果可以的话,那会很好(文件名+行号+代码段)。
菲利普(Phillip)

@slhck:未安装ack-grep;我没有安装它的权限。
菲利普(Phillip)

1
您不需要ack-grep,可以将问题中的示例作为开始使用(就像我说的那样),即find | xargs | grep线条。对于特定的输出,man grep始终很有用。
slhck 2011年

@slhck:谢谢,所以我做到了grep -r --include=*.<type> "<string>" .,该方法奏效了。不幸的是,手册页提到尾随点不是很简单。
菲利普(Phillip)

Answers:


11
find . -type f -name '*.extension' | xargs grep "string"

此命令在本地目录(。)上对名称与模式* .extension匹配的任何文件运行find,然后在find的结果上对“ string” 运行grep。请注意,find本质上是递归的。只要您可以根据名称将所需文件与不基于名称的文件区分开,这应该对您有用。


2
这与包含空格的文件名中断,您应该使用该print0选项以更安全。
slhck 2011年

只会find -print0无济于事,请使用xargs -0find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo 2014年

0

要列出文件名,指定文件中的行号以及出现的文本行:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

它只会在当前目录中运行,但会为您很好地格式化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.