在" End"之间打印行。文件中的关键字

时间:2017-09-03 17:45:47

标签: linux unix awk sed

从单词" End"的第一次出现开始直到最后一个单词"结束",需要grep它之间的所有行

在一个文件grep中,在End关键字

之间排成一行

考虑带有以下行的输入文件

----End-----
two
three
---End-----
four
ten
---End-----

预期产出:

area_id

2 个答案:

答案 0 :(得分:0)

$ awk '
/End/ {                        # at End
    print (b==""?"":b ORS) $0  # print buffer and End line
    f=1                        # flag up
    b=""                       # reset buffer
    next
}
f {                            # after first End 
    b=b (b==""?"":ORS) $0      # gather the buffer
}' file
----End-----
two
three
---End-----
four
ten
---End-----

答案 1 :(得分:0)

使用sedtac(来自GNU coreutils):

$ sed -n '/End/,$p' file | tac | sed -n '/End/,$p' | tac    
----End-----
two
three
---End-----
four
ten
---End-----

第一个sed仅允许从第一个分隔符到文件末尾的行通过。 tac会反转结果中行的顺序。

然后重复sedtac