首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在匹配行之前显示文件名

在匹配行之前显示文件名
EN

Stack Overflow用户
提问于 2013-03-15 20:12:25
回答 5查看 372K关注 0票数 317

如何让grep在其输出中的匹配行之前显示文件名?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-15 20:38:24

尝试这个小技巧,让grep认为它正在处理多个文件,这样它就会显示文件名:

grep 'pattern' file /dev/null

要获取行号,请执行以下操作:

grep -n 'pattern' file /dev/null
票数 470
EN

Stack Overflow用户

发布于 2017-02-25 06:42:04

不需要任何技巧。

grep --with-filename 'pattern' file

使用行号:

grep -n --with-filename 'pattern' file
票数 51
EN

Stack Overflow用户

发布于 2015-10-23 00:35:25

这个怎么样,我能做到这一点,部分归功于这篇文章。

你想要找到几个文件,假设日志有不同的名字但是有一种模式(例如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将输出写入文件中

在1989年的grep版本9.0.5中,这对我很有效。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15432156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档