How do I get multi-line string between two braces containing a specific search string?

前端 未结 3 1906
傲寒
傲寒 2020-12-11 09:19

I\'m looking for a quick and easy one-liner to extract all brace-delimited text-blocks containing a search string from a text file. I\'ve just about googled myself crazy on

3条回答
  •  失恋的感觉
    2020-12-11 09:32

    Here is a modified version of this gem from 'leu' (10x leu for enlighten us). This one is doing something very similarly. Extract everything between which begin with 'DEC::PKCS7[' and ending with ']!':

    cat file | sed '/^DEC::PKCS7\[/{s///; :1; /\]\!$/!{N; b1;}; s///;};'
    Explanation:
    /^DEC::PKCS7\[/             # if current line begins with 'DEC::PKCS7[' then execute next block
    {                           # start block
        s///;                       # remove all upto 'DEC::PKCS7['
        :1;                         # label '1' for code to jump to
        /\]\!$/!                     # if the line does not end with ']!' then execute next block
        {                               # start block
            N;                          # add next line to pattern space
            b1;                         # jump to label 1
        };                          # end block
        s///;                       # remove all from ']!' to end of line
    };                          # end block
    

    Notes:

    • This works on single and multi-line.
    • This will have unexpected behavior if you have ']!' in the middle of the input.
    • This does not answer the question. It's already answered very well. My intentions are just to help other cases.

提交回复
热议问题