How to select lines between two marker patterns which may occur multiple times with awk/sed

前端 未结 9 1223
离开以前
离开以前 2020-11-22 04:41

Using awk or sed how can I select lines which are occurring between two different marker patterns? There may be multiple sections marked with these

9条回答
  •  失恋的感觉
    2020-11-22 05:24

    Use awk with a flag to trigger the print when necessary:

    $ awk '/abc/{flag=1;next}/mno/{flag=0}flag' file
    def1
    ghi1
    jkl1
    def2
    ghi2
    jkl2
    

    How does this work?

    • /abc/ matches lines having this text, as well as /mno/ does.
    • /abc/{flag=1;next} sets the flag when the text abc is found. Then, it skips the line.
    • /mno/{flag=0} unsets the flag when the text mno is found.
    • The final flag is a pattern with the default action, which is to print $0: if flag is equal 1 the line is printed.

    For a more detailed description and examples, together with cases when the patterns are either shown or not, see How to select lines between two patterns?.

提交回复
热议问题