我想从子目录中的某个文件中找到一个字符串。就像我们在 bundle/. 在 bundle/ 中有多个子目录和多个 txt 文件我想做类似的事情
find . -type f -exec grep "\<F8\>" {} \;
想要获取包含字符串 < F8 > 的文件
这个命令确实有效,找到字符串,但从不返回文件名我希望任何人都可以给我一个更好的解决方案,比如显示文件名以及包含该字符串的行
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 的输出中转义。
您可以单独使用grep
。
grep -r '<F8>' .
这应该列出所有匹配的文件和行号:
grep -nR '<F8>' *
就个人而言,我发现它更容易使用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>