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

时间:2011-11-12 16:15:50

标签: awk grep

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

有一个grep标志会为我做这个吗?我一直在尝试使用-n-l的组合,但这些组合要么打印出没有数字的文件名,要么只是将大量文本转储到终端,这些文本无法轻易读取

例如:

  grep -ln "search" *

我需要将它管道输入awk吗?

5 个答案:

答案 0 :(得分:118)

我认为-l限制性太强,因为它会抑制-n的输出。我建议-H--with-filename):打印每个匹配的文件名。

grep -Hn "search" *

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

grep -nHo "search" * 

答案 1 :(得分:29)

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

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

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

接下来,我们使用冒号:将结果传递给cut命令作为字段分隔符,并显示字段1到2。

当我不需要行号时,我经常使用-f1(只是文件名和路径),然后将输出传递给uniq,这样我只能看到每个文件名一次:< / p>

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

答案 2 :(得分:11)

我喜欢使用:

grep -niro 'searchstring' <path>

但那只是因为我总是忘记其他方式,我不能忘记 Robert de grep - niro 因为某些原因:)

答案 3 :(得分:1)

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

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

出于好奇:

$ grep --help | grep -Ee '-[HEroine],'
  -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

答案 4 :(得分:0)

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

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

没有nHo,您只会了解某个文件在某个位置与该字符串匹配。

相关问题