I have a log-file where at the end of a series of lines you can see if this block is relevant.
Now I'm looking for a command like sed to delete de blocks ending with "Content-Length: 0" and beginning with the last "--" before this line.

I tried sed -n "/--/,/Content-Length: 0/d" but this takes the first "--" and the first "Content-Length: 0" and deletes it.

ex :

line 1 "--"
line 2
line 3 "Content-Length: 20"
line 4 "--"
line 5
line 6 "Content-Length: 0"

i want to delete line 4,5 and 6 not line 1 to 6

how can i do this?

The answer to work with tac instead of cat does the job! but ultimately i would like to use this in a tail -f construction

This question came from our site for system and network administrators.

while its not the end of the file, find the "--" and note the line number in a variable, find the next line that contains "Content-Length" and if it also has 0 in it, delete all lines from "--" to content-length 0, otherwise skip to the next "--"
–
ponsfonzeNov 7 '12 at 2:31

4 Answers
4

That appends every line to hold space. The -- marker lines overwrite the hold space - so you start with a fresh buffer for each of your -- through Content blocks. All lines that do not contain the string Content-Length followed at some point by at least one digit that is not a 0 are then deleted. So the only chance you could finally get the hold space back into pattern space and print it is on a line that matches Content-Length then some digit that is not 0 at which point every line since the last -- is printed.

Match between the pattern range. Append this range to the hold space. On the last
line of the range, copy the hold space to pattern space to work with it. Then use
find/replace regex to remove everything after the last occurrence of '--'. HTH.