This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Calling all sed wizards! Need a little help with possible fix:Subtle permissions bug in interaction between Makefiles & libtool(Cygwin-specific)


On Thu, 5 Sep 2002, Igor Pechtchanski wrote:

> On Thu, 5 Sep 2002, Max Bowsher wrote:
> > Igor Pechtchanski wrote:
> > > On Thu, 5 Sep 2002, Max Bowsher wrote:
> > >
> > >> I had an idea:
> > >> sedpat6='s,\(-m [0-7]*\)6,\17,g'
> > >> sedpat4='s,\(-m [0-7]*\)4,\15,g'
> > >> sed -e "$sedpat4" -e "$sedpat4" -e "$sedpat4" -e "$sedpat6" -e
> > >> "$sedpat6" -e "$sedpat6"
> > >>
> > >> but can anyone show me a way without repeating each pattern 3 times?
> > >
> > > Hmm, "perl -pe 's/(?<=-m )([0-7]+)/($a=$1)=~tr,046,157,;$a/ge'"? O:)
> >
> > Yep, but given that this is for use in libtool, it can't rely on perl.
> > Max.
>
> Okay, then...  There is a pure sed solution that doesn't use repetition.
> It's peculiar, and involves a loop.  In this particular case, you are
> probably better off just repeating the patterns 3 times.  But I'm posting
> it just to show that it can be done.  Call me vain. :-D
>
> Okay, here goes:
>
> sed 's/$/0^A1^A2^B3^C4^E5^E6^G7^G/;:a;s/\(-m [0-7^A-^G]*\)\([0-7]\)\(.*\2\)\(.\)/\1\4\3\4/;ta;s/.\{16\}$//;y/^A^B^C^E^G/12357/'
>
> where ^A through ^G above are actually control characters (use ^V to enter
> at the prompt).  They don't have to be those exact ones, but they should
> be characters that can't appear in the rest of the string (because of the
> 'y' command).
>
> For those who want to decipher the code yourself, stop reading now.
> Spoiler below:
>
> The first substitution appends a fixed-length map from numbers to
> associated control characters.  The second is in a loop, and basically
> substitutes any number found after a "-m [0-7^A-^G]*" with the associated
> character from the map, while there are characters available.  The third
> substitution removes the map, and the 'y' command translates the control
> characters back into digits.
>
> I got the idea from the word capitalization script here:
> http://users.cybercity.dk/~bse26236/batutil/help/sed/CAPITALI.HTM
>
> Enjoy,
>         Igor

A performance improvement for this is to only execute these commands for
lines containing '-m [0-7]\+', i.e.,

sed '/-m [0-7]\+/{s/$/0^A1^A2^B3^C4^E5^E6^G7^G/;:a;s/\(-m [0-7^A-^G]*\)\([0-7]\)\(.*\2\)\(.\)/\1\4\3\4/;ta;s/.\{16\}$//;y/^A^B^C^E^G/12357/}'

:-)
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

It took the computational power of three Commodore 64s to fly to the moon.
It takes a 486 to run Windows 95.  Something is wrong here. -- SC sig file


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]