我想从子目录中的某个文件中找到一个字符串。 喜欢 我们在捆绑/。 在bundle /中有多个子目录和多个txt文件 我想做像
这样的事情 find . -type f -exec grep "\<F8\>" {} \;
想要获取包含字符串&lt;的文件F8&gt;
此命令确实有效,找到字符串,但永远不会返回文件名 我希望任何人都可以给我一个更好的解决方案,比如显示文件名以及包含该字符串的行
答案 0 :(得分: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的输出中转义。
答案 1 :(得分:1)
您可以单独使用grep
。
grep -r '<F8>' .
答案 2 :(得分:0)
这应该列出匹配的所有文件和行号:
grep -nR '<F8>' *
答案 3 :(得分:0)
就我个人而言,我发现使用ack
会更容易。 (ack-grep
是Ubuntu repos中使用的名称,以防止它与另一个同名软件混淆。)它可以在大多数主要存储库中使用。
该命令将是ack -a "<F8>"
(或Ubuntu中的ack-grep -a "<F8>"
)。 -a
选项用于搜索所有文件类型。
示例:
<强> testfile的强>
Line 1
Line 2
Line 3
<F8>
<F9>
<F10>
Line 4
Line 5
Line 6
<强>输出:强>
$ ack -a "<F8>"
testfile
4:<F8>