2013-07-02 09:24:45 +0000 2013-07-02 09:24:45 +0000
83
83

使用find(1)和grep(1)查找包含某个字符串的文件。

find . -type f -print -exec cat {} \; | grep some string

上面的命令没有打印文件路径。

我在使用。Ubuntu, bash 4.

Risposte (5)

117
117
117
2013-07-02 12:01:16 +0000

我使用了

grep "some string" . -R

,它工作得更快

p.s.

更复杂的使用情况

grep -HiRE "some string|other string" . #H for file printing, i for case-insensitive, R for recursive search, E for regex

阅读param i解释

grep --help | grep -- -i
98
98
98
2013-07-02 10:02:41 +0000

那是因为你给grep输入了一个刚好包含文件名的文本流。因为你没有提供文件名作为 grep 的参数,所以不能指望它推断出匹配的行来自哪个文件。使用 xargs:

find . -type f -print | xargs grep "some string"

因为你有GNU find/xargs,这是xargs读取文件名比较安全的方法:

find . -type f -print0 | xargs -0 grep "some string"

如果你只想要有匹配行的文件名,而不显示匹配行:

find . -type f -print0 | xargs -0 grep -l "some string"
```。
14
14
14
2014-09-26 13:24:22 +0000

我经常在复杂的文件夹结构中搜索源代码,我发现使用以下方法很有用。

cd /your/folder/
grep -rHino "your string"

有了这些参数,不用find,我就能得到文件的完整路径和包含指定字符串的行号**。

它也很容易记住,因为它像rHino一样,通过你的搜索BASH进行搜索:)

我将通过一个简单的例子来展示它是如何工作的。

让我们用cat显示一个文件的内容。

jeeves ~ # cat fw.stop
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

让我们递归搜索所有包含 “iptables -P "的文件。

jeeves ~ # grep -rinHo "iptables -P"
fw.stop:9:iptables -P
fw.stop:10:iptables -P
fw.stop:11:iptables -P

正如你在输出中看到的那样,我们有filename:hit row:searched string

下面是对所使用参数的更详细描述:

-r 对于每个目录操作数,递归地读取并处理该目录中的所有文件。遵循命令行中的符号链接,但跳过递归遇到的符号链接。注意,如果没有给出文件操作数,grep会搜索工作目录。这与’–directories=recurse'选项相同。

-i 打印每个匹配的文件名。当有多个文件要搜索时,这是默认的。

-n 在输出的每一行前加上输入文件中基于1的行号。

-H 打印每个匹配的文件名。当有多个文件要搜索时,这是默认的。

*-o 只打印匹配行的匹配(非空)部分,每个部分都在单独的输出行中。输出行使用与输入相同的定界符,如果同时使用-z (–null-data),定界符为空字节(参见其他选项)。

2
2
2
2015-10-28 19:03:56 +0000

我更喜欢

|查找文件 |make grep ont finding file | show de full path of the file

find / -type f -exec grep ‘some string’ {} \; -exec echo {} \;

0
0
0
2018-10-22 16:15:38 +0000

Silver Searcher](https://github.com/ggreer/the_silver_searcher)是一个非常快速和方便的搜索文件和内容的工具。

要解决你的问题,silver searcher命令应该是这样的…。

ag 'some string' -l

-l 只打印包含匹配的文件名(不打印匹配的行)。