我的情况类似于junit.org。我有一个文本文件,其输出格式如下:
HEADER A
lines of output
----------------
HEADER B
lines of output
----------------
...rinse and repeat...
我想匹配所有具有相同标头的块。 grep
似乎不足以完成此任务。我只是模糊地熟悉awk
和sed
。足以意识到它们可能是最合适的工具。那么如何匹配用匹配的HEADER和---------- lines包围的块?
我基于相关问题的尝试是
awk '/HEADER/{f=1} /-/{f=0;print} f' filename.txt
但是,这仍然会匹配块中的一些行和第二个标题。
答案 0 :(得分:1)
调整this answer以解决问题,我得到了:
sed -n '/HEADER/,/-/p' filename.txt
这是相当脆弱的(它在找到连字符时停止),所以像
sed -n '/HEADER/,/^-+$/p' filename.txt
检查完整的连字符可能更好。据我所知(不是sed
专家),斜杠之间的所有内容都只是常规正则表达式,启用了多行标记m
。
答案 1 :(得分:1)
对于这样的文件:
$ cat file1
HEADER A
lines of output1.1
----------------
HEADER B
lines of output2.1
----------------
HEADER A
lines of output1.2
----------------
HEADER B
lines of output2.2
----------------
HEADER A
lines of output1.3
----------------
HEADER B
lines of output2.3
----------------
这样的东西给出了所有HEADER A行:
$ awk '/HEADER A/{f=1} /-------/ && f==1{f=0;print} f' file1
HEADER A
lines of output1.1
----------------
HEADER A
lines of output1.2
----------------
HEADER A
lines of output1.3
----------------
您只需要在终止线
处创建一个AND条件(&&)如果这不是您所需要的,我担心您应该重新输入您的问题,以便更清楚。