我正在尝试使用 grep 搜索我的 rails 目录。我正在寻找一个特定的单词,我想用 grep 打印出文件名和行号。
是否有一个 grep 标志可以为我执行此操作?我一直在尝试使用 -n
和 -l
的组合,但它们要么打印出没有数字的文件名,要么只是将大量文本转储到终端,这些文本不容易阅读。
前任:
grep -ln "search" *
我需要通过管道将它传输到 awk 吗?
我认为 -l
限制性太强,因为它抑制了 -n
的输出。我建议 -H
(--with-filename
):打印每个匹配的文件名。
grep -Hn "search" *
如果输出过多,请尝试 -o
以仅打印匹配的部分。
grep -nHo "search" *
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
我喜欢使用:
grep -niro 'searchstring' <path>
但这只是因为我总是忘记其他方式,并且出于某种原因我无法忘记 Robert de grep -
niro :)
来自@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
以下是我如何使用投票的答案来搜索树以查找包含字符串的 fortran 文件:
find . -name "*.f" -exec grep -nHo the_string {} \;
如果没有 nHo,您只能知道某个文件在某处与字符串匹配。