如何在unix中搜索特定文件中的文本

时间:2015-06-12 10:35:32

标签: unix grep

我正在使用Ubuntu机器并尝试使用以下命令来搜索文本:

此命令以递归方式检查给定目录中是否存在该字:

1)此处<hello>是我搜索的单词,它在从当前目录开始的所有文件中递归搜索。它工作正常。

grep -r "<hello>" .

2)现在我想将搜索限制为仅限于特定文件,仅限于xml个文件:

grep --include=\*.{java} -rnw '/home/myfolder/' -e "<hello>"

这次命令花费更多时间,最后没有给出任何结果。但我的文件有内容。

我已经通过这个链接 - How do I find all files containing specific text on Linux?来编写我的第二个命令。

我的第二个命令有问题吗?还有一个执行速度快的备用命令吗?

3 个答案:

答案 0 :(得分:7)

最好使用find,因为grep的include / exclude可能会让人感到有些困惑:

find -type f -name "*.xml" -exec grep -l 'hello' {} +

这会查找名称以.xml结尾的文件,并对其执行grep 'hello'。使用-l(L),我们将打印文件名,而不是匹配的行。

解释

  • find -type f这会在给定的目录结构中找到文件。
  • -name "*.xml"选择名称以.xml结尾的文件。
  • -execfind命令的每个结果执行命令。
  • -exec grep -l 'hello' {} +对给定文件执行grep -l 'hello'。使用{} +,我们引用了匹配的名称(它就像执行grep 'hello' file,但引用了find命令提供的文件的名称)。此外,grep -l(L)返回文件名,而不是匹配本身。

答案 1 :(得分:0)

好的,问题是 - xml_grep][1]不是纯文本,不管看起来有多么类似。因此它并不适合传统的&#39; grepping。

我是否可以建议您查看[XML::Twig哪个是find -exec包附带的实用程序?

或者,如果您能够提供有关源内容和所需输出的更具体示例,我们可以提供更具体的答案。

无论如何,除此之外 - 我不会做一个递归的grep,而是findString允许您首先过滤文件,并且效率很高......但实际上您无需阅读每个匹配的文件以进行检查。

答案 2 :(得分:0)

这对我来说很有用,用GNU *.xml搜索*.javagrep个文件:

grep --include=\*.{xml,java} -rl '/path' -e 'hello'

在你的问题中,你有-w作为标志,这意味着匹配整个单词。