之前匹配线显示的文件名(Display filename before matching line)

2019-07-21 17:10发布

我怎样才能得到grep ,以显示其输出匹配的行之前的文件名?

Answer 1:

试试这个小把戏哄grep ,以为它在处理多个文件,使其显示的文件名:

grep 'pattern' file /dev/null

也得到了行号:

grep -n 'pattern' file /dev/null


Answer 2:

如果你有选项-H-n可用的( man grep是你的朋友):

$ cat file
foo
bar
foobar

$ grep -H foo file
file:foo
file:foobar

$ grep -Hn foo file
file:1:foo
file:3:foobar

选项:

-H,--with文件名

每个匹配打印文件名。 这是默认的当有多个文件进行搜索。

-n,--line数

前缀输出的每一行与它的输入文件中的基于1的行号。 (-n是由POSIX指定)。

-H是GNU扩展,但-n是由POSIX指定



Answer 3:

没有必要的特技。

grep --with-filename 'pattern' file

随着行号:

grep -n --with-filename 'pattern' file


Answer 4:

这个怎么样,我设法实现感谢,一部分,这个职位。

你想找到几个文件,让说不同的名字,但一个模式日志(如filename=logfile.DATE ),里面有几个目录与一个模式(例如/logsapp1, /logsapp2 )。 每个文件都有你要到grep(如模式"init time" ),以及您希望有"init time"每个文件的,但知道哪个文件属于。

find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt

然后outputfilename.txt会是这样的

./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms

一般来说

find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt

说明:

find命令将根据搜索图案中的文件名

然后,管xargs -I{}将重定向find输出到{}

这将是对于输入grep ""pattern" {}

然后技巧,使grep显示文件名\dev\null

最后,写在文件的输出与tee outputfile.txt

这为我工作grep版本9.0.5构建1989年。



Answer 5:

这是从先前的溶液的轻微修改。 我的例子查找标准错误重定向在bash脚本: grep '2>' $(find . -name "*.bash")



Answer 6:

grep 'search this' *.txt

工作对我来说,通过所有.txt文件搜索(输入,当然你自己的搜索值)。



文章来源: Display filename before matching line
标签: unix grep