我怎样才能得到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