[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problem with sed s command



Once upon a time David P James said...
> I use KMail to read this and other mailing lists. When replying to a 
> message, KMail will look for the last instance of <new 
> line><dash><dash><space><return> and remove that and everything below 
> from the reply. A problem occurs however on mailing lists that use that 
> format to delimit the unsubscribe info when the author has also used it 
> since KMail will then only remove the unsubscribe info and not the 
> author's sig.
> 
> The solution seems simple enough - use a KMail filter to pipe messages 
> through sed to remove the second signature delimiter if there is one. 
> Here is the sed script I am using but it doesn't work as expected:
> 
> sed s/'^\-\-\ '//2
> 
> From my understanding of the man and info pages, this should look for 
> the second instance of <dash><dash><space> and replace it with nothing. 

No, the "2" flag will match the second regex on the _line_, not in the
file. This is not much use with the anchors (^ and $), since you cannot
have multiple matches on a line.

Try sed 's/-- //2' on stdin and type:
-- hello -- world -- x

and you'll get
-- hello world -- x

ie. it's removed the second "-- ".

I'm not sure you can do what you want with sed, since you need to
maintain some state, whereas sed seems to be stateless - each line is
processed independently of the other lines.

However, awk should do what you want:

awk 'BEGIN {sepcount=0} /^-- $/ {sepcount+=1; if (sepcount==2) next} {print}'

Alternatively, you can use awk to strip the sigs completely:

awk '/^-- $/ {nextfile} {print}'




Reply to: