Sed : print all lines after match

前端 未结 5 1470
-上瘾入骨i
-上瘾入骨i 2020-12-14 10:46

I got my research result after using sed :

zcat file* | sed -e \'s/.*text=\\(.*\\)status=[^/]*/\\1/\' | cut -f 1 - | grep \"pattern\"

5条回答
  •  被撕碎了的回忆
    2020-12-14 11:27

    Maybe this is what you actually want? Find lines matching "pattern" and extract the field after text= up through just before status=?

    zcat file* | sed -e '/pattern/s/.*text=\(.*\)status=[^/]*/\1/'
    

    You are not revealing what pattern actually is -- if it's a variable, you cannot use single quotes around it.

    Notice that \(.*\)status=[^/]* would match up through survstatus=new in your example. That is probably not what you want? There doesn't seem to be a status= followed by a slash anywhere -- you really should explain in more detail what you are actually trying to accomplish.

    Your question title says "all line after a match" so perhaps you want everything after text=? Then that's simply

    sed 's/.*text=//'
    

    i.e. replace up through text= with nothing, and keep the rest. (I trust you can figure out how to change the surrounding script into zcat file* | sed '/pattern/s/.*text=//' ... oops, maybe my trust failed.)

提交回复
热议问题