使用命令grep和locate

10

我该如何使用grep命令在locate命令找到的文件中定位特定的单词?

locate my.cnf | grep user

我希望grep命令在locate命令找到的文件中搜索单词"user"。

4个回答

17

尝试:

locate my.cnf | xargs grep user

这个选项是正确的,但是Matt先回复了并且它有效。谢谢。 - Jhonathan
3
如果结果相对较小,用Matt的方法;如果结果可能非常大,应选择使用xargs - Robᵩ
有关文件路径中所需的选项,请参阅下面Marko Kudjerski的回答。 - Markus
请参阅下面Marko Kudjerski的答案,了解文件路径中必需的空格选项。 - undefined

16

使用命令替换而不是管道:

grep user `locate my.cnf`

1
我更喜欢这种方法,而不是下面的 xargs 方法,因为它保留了 grep 的高亮显示。 - Michael Osl
1
@moeso:你可以使用--color=always参数让grep始终输出彩色结果。 - cha0site

2
为了在名称中包含空格的情况下正常工作,您可以这样做:
locate -0 my.cnf | xargs -n1 -0 grep user

显示相同的输出三次。 - Jhonathan
没有任何开关,grep 自动输出所有匹配的行(您的文件可能有多个匹配的行)。如果你想在它们前面显示行号,可以使用 grep-n 开关。否则,你可以让它只输出每个文件中第一个匹配项,使用 -m 1,或者只输出与 -l 匹配的文件名。 - Marko Kudjerski
如果文件路径中包含空格,那么locate -0确实是必要的。然而,在bash中,为了查看文件的完整路径,我需要在grep命令中添加-H参数,就像这样:locate -0 *.tex | xargs -n1 -0 grep -H user - Markus
如果文件路径中包含空格,那么locate -0确实是必要的。然而,在bash中,为了查看文件的完整路径,我需要在grep命令中添加-H,就像这样:locate -0 *.tex | xargs -n1 -0 grep -H user - undefined

0

如果我理解正确的话,grep user $(locate my.cnf) 或许是您正在寻找的内容。


4
请注意,如果那个 locate 命令返回太多数据,程序会崩溃。命令行大小是有限制的。 - cha0site

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接