过滤文本文件的行

时间:2017-07-16 17:51:56

标签: regex awk sed grep

我的情况类似于junit.org。我有一个文本文件,其输出格式如下:

HEADER A
lines of output
----------------
HEADER B
lines of output
----------------
...rinse and repeat...

我想匹配所有具有相同标头的块。 grep似乎不足以完成此任务。我只是模糊地熟悉awksed。足以意识到它们可能是最合适的工具。那么如何匹配用匹配的HEADER和---------- lines包围的块?

我基于相关问题的尝试是

awk '/HEADER/{f=1} /-/{f=0;print} f' filename.txt

但是,这仍然会匹配块中的一些行和第二个标题。

2 个答案:

答案 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条件(&&)

如果这不是您所需要的,我担心您应该重新输入您的问题,以便更清楚。