在匹配行之前显示文件名(grep)
我怎样才能让grep
在输出中的匹配行之前显示文件名?
试试这个小窍门,让grep
认为它正在处理多个文件,以便显示文件名:
grep 'pattern' file /dev/null
还要获得行号:
grep -n 'pattern' file /dev/null
如果你有选项-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-filename
打印每个比赛的文件名。 当有多个文件要search时,这是默认的。
-n, – 行号
在每个输出行的前面加上input文件中的从1开始的行号。 (-n由POSIX指定)
-H
可能是一个GNU扩展,但-n
由POSIX指定。
没有必要的把戏。
grep --with-filename 'pattern' file
用行号:
grep -n --with-filename 'pattern' file
怎么样,我设法得到部分感谢,这个职位。
你想find几个文件,可以说有不同的名字,但模式(例如filename=logfile.DATE
),在几个目录中有一个模式(例如/logsapp1, /logsapp2
)的/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
命令将根据模式search文件名
那么,pipe道xargs -I{}
会将find
输出redirect到{}
这将是grep ""pattern" {}
的inputgrep ""pattern" {}
然后让grep
显示文件名\dev\null
的技巧
最后,用tee outputfile.txt
将输出写入文件
这工作在我的grep
版本9.0.5build立1989年。
这是从以前的解决scheme稍作修改。 我的示例在bash脚本中查找stderrredirect: grep '2>' $(find . -name "*.bash")
grep 'search this' *.txt
为我工作search所有.txt文件(当然,input您自己的search值)。