Search code examples
regexunixsed

sed : how to print all lines after line with a match?


I got my research result after using sed :

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

But it only shows the part that I cut. How can I print all lines after a match ?

I'm using zcat so I cannot use awk.

Thanks.

Edited :

This is my log file :

[01/09/2015 00:00:47]       INFO=54646486432154646 from=steve   idfrom=55516654455457       to=jone       idto=5552045646464 guid=100021623456461451463   n
um=6    text=hi my number is 0 811 22 1/12   status=new      survstatus=new

My aim is to find all users that spam my site with their telephone numbers (using grep "pattern") then print all the lines to get all the information about each spam. The problem is there may be matches in INFO or id, so I use sed to get the text first.


Solution

  • 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.)