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

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

该命令用于递归检查该单词是否存在于给定的目录中:

1)这里<hello>是我搜索的词,它从当前目录开始以递归方式搜索所有文件。 它工作正常。

grep -r "<hello>" .

2)现在我想限制搜索只有特定的文件,只对xml文件说:

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

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

我已经通过这个链接 - 如何在Linux上查找包含特定文本的所有文件? 编写我的第二个命令。

我的第二个命令有什么问题吗? 另外还有一个可以快速执行的替代命令?


使用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)返回文件名,而不是匹配本身。

  • 好的,所以问题是 - XML不是纯文本,但看起来很相似。 因此,它不适合'传统'选择。

    我可以建议看看[ xml_grep][1]这是一个为此目的而附带XML::Twig软件包的实用程序吗?

    或者,如果您能够更具体地说明您的源内容和期望的输出结果,我们可以提供更具体的答案。

    无论如何,除此之外 - 我不会做递归grep,而是find -execfind可以让你首先过滤文件,而且效率很高......但是实际上没有解决你必须阅读每个匹配的文件才能检查的事实。


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

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

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

    链接地址: http://www.djcxy.com/p/13671.html

    上一篇: How to search for a text in specific files in unix

    下一篇: Unable to enable globstar in Bash 4