[ILUG] Re: Re: Re: Re: sed question

Marcus Furlong furlongm at hotmail.com
Sat Aug 16 19:17:32 IST 2008


On Saturday 16 August 2008 17:24 in
<20080816162413.GU14206 at project-bob.org>, Proinnsias Breathnach wrote:

> On Sat, Aug 16, 2008 at 04:33:02PM +0100, Marcus Furlong wrote:
>> > sed -e '
>> > s/ my_attribute="ASD"/@="ASD"/g
>> > s/ my_attribute="SDF"/@="SDF"/g
>> > s/ my_attribute="DFG"/@="DFG"/g
>> > s/ my_attribute="FGH"/@="FGH"/g
>> > s/ my_attribute="GHJ"/@="GHJ"/g
>> > s/ my_attribute="HJK"/@="HJK"/g
>> > s/  *my_attribute="[^"]*"//g
>> > s/@="/ my_attribute="/g
>> > '
>> > 
>> Could you explain what's happening in the above? I've searched for a
>> similar example with explanations but didn't find one, and now I'm all
>> curious.
>> 
> 
> Quite simple really
> 
> 1) Replace the valid /my_attribute="XYZ"/ strings with /@="XYZ"/
> 2) Remove any remaining /my_attribute=/ strings (the invalid / empty
> ones)
> 3) Replace any occurance of /@=/ with /my_attribute=/ returning the
> strings to their former glory :)
> 
> Easy really !

Aha! I was over-complicating it in my head, and assumed @ was some sort of
operator or array. So the above could equivalently be written as

sed -e '
s/ my_attribute="\(ASD\|SDF\|DFG\|FGH\|GHJ\|HJK\)"/@="\1"/g
s/  *my_attribute="[^"]*"//g
s/@="/ my_attribute="/g
'

Seems to work for me anyway.

Marcus.




More information about the ILUG mailing list