Sed : print all lines after match
Printing all lines after a match in sed
:
$ sed -ne '/pattern/,$ p' # alternatively, if you don't want to print the match:$ sed -e '1,/pattern/ d'
Filtering lines when pattern matches between "text=" and "status=" can be done with a simple grep
, no need for sed
and cut
:
$ grep 'text=.*pattern.* status='
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.)