在grep输出中显示文件名和行号


87

我正在尝试使用grep搜索rails目录。我正在寻找一个特定的单词,我想grep打印出文件名和行号。

是否有grep标志可以帮我做到这一点?我一直在试图使用的组合-n-l,但这些要么打印出来的文件名不带数字或只是倾出大量的文字来不能轻易读取终端。

例如:

  grep -ln "search" *

我需要将其通过管道传输到awk吗?


Answers:


137

我认为-l这过于严格,因为它会抑制的输出-n。我建议-H--with-filename):为每个匹配项打印文件名。

grep -Hn "search" *

如果那提供了太多的输出,请尝试-o仅打印匹配的部分。

grep -nHo "search" * 

这个答案对我也很有效。我需要递归搜索,并使用了以下示例命令:grep -Hnor“ localhost”。此列表列出了所有匹配的文件名和行号,简洁明了。
Tore Aurstad

这还将显示结果,而不仅仅是文件名和行号
资格

30
grep -rin searchstring * | cut -d: -f1-2

也就是说,递归搜索(searchstring在此示例中为字符串),忽略大小写并显示行号。该grep的输出将类似于:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

接下来,使用冒号:作为字段定界符并显示字段1到2 ,将结果通过管道传递到cut命令。

当我不需要行号时-f1(经常使用文件名和路径),然后将输出通过管道传输到uniq,这样我只看到每个文件名一次:

grep -ir searchstring * | cut -d: -f1 | uniq

1
我觉得这最好地回答了原始问题。仅文件名和行号。
mastaBlasta

1
请注意,如果您具有Windows的绝对路径名(如`C:\ Users \ me \ git`),则此方法将无效,因为它已经包含一个冒号。
2015年

18

我喜欢使用:

grep -niro 'searchstring' <path>

但这仅仅是因为我总是忘记其他方式,并且由于某种原因我也不能忘记罗伯特·grep -德尼罗Robert de niro) :)


从来没有想过我会为以上投票。只是一个有趣的分享。谢谢!(但它确实有效-至少在MacOS上有效)
Bas van Ommen

爱您记住这一点的方式!
格雷格·希尔斯顿

0

@ToreAurstad的评论可以被拼写grep -Horn 'search' ./,这更容易记住。

grep -HEroine 'search' ./ 也可以工作;)

对于好奇:

$ grep --help | grep -Ee '-(H|E|r|o|i|n|e),'
  -E, --extended-regexp     PATTERNS are extended regular expressions
  -e, --regexp=PATTERNS     use PATTERNS for matching
  -i, --ignore-case         ignore case distinctions
  -n, --line-number         print line number with output lines
  -H, --with-filename       print file name with output lines
  -o, --only-matching       show only nonempty parts of lines that match
  -r, --recursive           like --directories=recurse

0

这是我使用推荐的答案搜索树以查找包含字符串的fortran文件的方式:

find . -name "*.f" -exec grep -nHo the_string {} \;

如果没有nHo,您将仅了解到某个文件与该字符串匹配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.