This is the mail archive of the 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, 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:

      |\      _,,,---,,_
ZZZzz /,`.-'`'    -.  ;-;;,_
     |,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:
Bug reporting:

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