如何让grep
在其输出中的匹配行之前显示文件名?
发布于 2013-03-15 20:38:24
尝试这个小技巧,让grep
认为它正在处理多个文件,这样它就会显示文件名:
grep 'pattern' file /dev/null
要获取行号,请执行以下操作:
grep -n 'pattern' file /dev/null
发布于 2017-02-25 06:42:04
不需要任何技巧。
grep --with-filename 'pattern' file
使用行号:
grep -n --with-filename 'pattern' file
发布于 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中,这对我很有效。
https://stackoverflow.com/questions/15432156
复制相似问题