嗨,我正在尝试使用grep搜索我的rails目录 . 我正在寻找一个特定的单词,我想grep打印出文件名和行号 . 有一个grep标志会为我做这个吗?我一直在尝试使用-n和-l的组合,但这些都是打印出没有数字的文件名,或者只是将大量文本转储到终端,这些文本无法轻易读取 .
例如:
grep -ln "search" *
我需要将它管道输入awk吗?
我认为 -l 限制性太强,因为它抑制了 -n 的输出 . 我建议 -H ( --with-filename ):打印每场比赛的文件名 .
-l
-n
-H
--with-filename
grep -Hn "search" *
如果输出太多,请尝试 -o 仅打印匹配的部分 .
-o
grep -nHo "search" *
grep -rin searchstring * | cut -d: -f1-2
这就是说,递归搜索(对于本例中的字符串 searchstring ),忽略大小写,并显示行号 . 该grep的输出将如下所示:
searchstring
/path/to/result/file.name:100: Line in file where 'searchstring' is found.
接下来,我们将结果传递给cut命令,使用冒号 : 作为字段分隔符并显示字段1到2 .
:
当我不需要行号时,我经常使用 -f1 (只是文件名和路径),然后将输出传递给 uniq ,这样我只看到每个文件名一次:
-f1
uniq
grep -ir searchstring * | cut -d: -f1 | uniq
我喜欢用:
grep -niro 'searchstring' <path>
但由于某种原因,'s just because I always forget the other ways and I can'忘了 Robert de grep - niro
3 回答
我认为
-l
限制性太强,因为它抑制了-n
的输出 . 我建议-H
(--with-filename
):打印每场比赛的文件名 .如果输出太多,请尝试
-o
仅打印匹配的部分 .这就是说,递归搜索(对于本例中的字符串
searchstring
),忽略大小写,并显示行号 . 该grep的输出将如下所示:接下来,我们将结果传递给cut命令,使用冒号
:
作为字段分隔符并显示字段1到2 .当我不需要行号时,我经常使用
-f1
(只是文件名和路径),然后将输出传递给uniq
,这样我只看到每个文件名一次:我喜欢用:
grep -niro 'searchstring' <path>
但由于某种原因,'s just because I always forget the other ways and I can'忘了 Robert de grep - niro