0

我想从子目录中的某个文件中找到一个字符串。就像我们在 bundle/. 在 bundle/ 中有多个子目录和多个 txt 文件我想做类似的事情

  find . -type f -exec grep "\<F8\>" {} \;

想要获取包含字符串 < F8 > 的文件

这个命令确实有效,找到字符串,但从不返回文件名我希望任何人都可以给我一个更好的解决方案,比如显示文件名以及包含该字符串的行

4

4 回答 4

2
grep -rl '<F8>' .

-r选项告诉 grep 在目录中递归搜索.

-l选项告诉它只显示匹配的文件名,而不是行本身。

您的输出将如下所示:

./thisfile
./foo/bar/thatfile

如果要将其限制为仅一个文件,请附加| head -1到行尾。

如果你想要像这样的输出:

./thisfile:My text contains the <F8> string
./foo/bar/thatfile:didn't remember to press the <F8> key on the

那么你可以放弃这个-l选项。请注意,此输出解析不安全,因为文件名可能包含冒号,并且文件名中的冒号不会在 grep 的输出中转义。

于 2012-06-08T04:36:43.570 回答
1

您可以单独使用grep

grep -r '<F8>' .
于 2012-06-08T01:33:45.410 回答
0

这应该列出所有匹配的文件和行号:

grep -nR '<F8>' *
于 2012-06-08T01:36:48.387 回答
0

就个人而言,我发现它更容易使用ack. (ack-grep是 Ubuntu 存储库中使用的名称,以免与其他同名软件混淆。)它在大多数主要存储库中都可用。

该命令将是ack -a "<F8>"(或ack-grep -a "<F8>"在 Ubuntu 中)。选项是-a搜索所有文件类型。

例子:

测试文件

Line 1
Line 2
Line 3
<F8>
<F9>
<F10>
Line 4
Line 5
Line 6

输出:

$ ack -a "<F8>"
testfile
4:<F8>
于 2012-06-08T04:55:29.347 回答