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