在某处找到文件中的字符串

时间:2012-06-08 01:32:01

标签: linux terminal

我想从子目录中的某个文件中找到一个字符串。 喜欢 我们在捆绑/。 在bundle /中有多个子目录和多个txt文件 我想做像

这样的事情
  find . -type f -exec grep "\<F8\>" {} \;

想要获取包含字符串&lt;的文件F8&gt;

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

4 个答案:

答案 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>