[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Help with an "easy" regular expression substitution

Iñaki Baz Castillo

12/14/2008 6:33:00 PM

Hi, I'm getting crazy to get a theorically easy substitution:

I've a file with a header:
X-Level: ***
where the number of "*" is variable (from 0 up to 10).

And I just want to replace "*" by "X", so get:
X-Level: XXX

I don't get it since I don't know how to replace ANY number of "*" with the=
=20
same number of "X" just in the header "X-Level".

Any help? Thanks a lot.


=2D-=20
I=C3=B1aki Baz Castillo

13 Answers

Iñaki Baz Castillo

12/14/2008 6:50:00 PM

0

El Domingo, 14 de Diciembre de 2008, David A. Black escribi=C3=B3:
> The first thing that comes to mind:
>
> =C2=A0 =C2=A0text.sub(/(X-Level: )(\*+)/) { $1 + 'X' * $2.size }
>
> or, in Oniguruma, using look-behind:
>
> =C2=A0 text.sub(/(?<=3DX-Level: )(\*+)/) { 'X' * $1.size }

Thanks, this is valid in Ruby, but I understand such a operation is not=20
feasible with "sed" command, is it?
I'm not sure yet about if I'll need to do this script in Ruby or Shell.

Thanks a lot.

=2D-=20
I=C3=B1aki Baz Castillo

Tim Greer

12/14/2008 7:16:00 PM

0

Iñaki Baz Castillo wrote:

> El Domingo, 14 de Diciembre de 2008, David A. Black escribió:
>> The first thing that comes to mind:
>>
>> text.sub(/(X-Level: )(\*+)/) { $1 + 'X' * $2.size }
>>
>> or, in Oniguruma, using look-behind:
>>
>> text.sub(/(?<=X-Level: )(\*+)/) { 'X' * $1.size }
>
> Thanks, this is valid in Ruby, but I understand such a operation is
> not feasible with "sed" command, is it?
> I'm not sure yet about if I'll need to do this script in Ruby or
> Shell.
>
> Thanks a lot.
>

sed '/^X-Level: /s/\*/X/g'

~]$ echo "X-Level: ****" | sed '/^X-Level: /s/\*/X/g'
X-Level: XXXX
~]$ echo "X-Level: ***********" | sed '/^X-Level: /s/\*/X/g'
X-Level: XXXXXXXXXXX

--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!

Tim Greer

12/14/2008 7:17:00 PM

0

Tim Greer wrote:

> sed '/^X-Level: /s/\*/X/g'

Pardin, you probably won't need to backware that meta character.

sed '/^X-Level: /s/*/X/g'

--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!

Iñaki Baz Castillo

12/14/2008 9:16:00 PM

0

El Domingo, 14 de Diciembre de 2008, David A. Black escribi=C3=B3:
> Just in case:
>
> sed -Ee '/X-Level: \*+/s/\*/X/g'

Great! I didn't know that usage of "sed"!

Thanks a lot.

=2D-=20
I=C3=B1aki Baz Castillo

William James

12/15/2008 6:58:00 AM

0

Iñaki Baz Castillo wrote:

> Hi, I'm getting crazy to get a theorically easy substitution:
>
> I've a file with a header:
> X-Level: ***
> where the number of "*" is variable (from 0 up to 10).
>
> And I just want to replace "*" by "X", so get:
> X-Level: XXX
>
> I don't get it since I don't know how to replace ANY number of "*"
> with the same number of "X" just in the header "X-Level".
>
> Any help? Thanks a lot.

s = "X-Level: ***"
==>"X-Level: ***"
s[ /X-Level: (\**)/, 1 ] = $1.gsub("*", "X")
==>"XXX"
s
==>"X-Level: XXX"

Robert Dober

12/15/2008 9:11:00 AM

0

On Sun, Dec 14, 2008 at 10:15 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrot=
e:
> El Domingo, 14 de Diciembre de 2008, David A. Black escribi=F3:
>> Just in case:
>>
>> sed -Ee '/X-Level: \*+/s/\*/X/g'
>
> Great! I didn't know that usage of "sed"!
As we are strolling OT alreeady ;) It is turing complete, and someone
wrote a web server in sed.
But nobody knows what happened to him, a sed story....
R.

Mark Thomas

12/15/2008 2:42:00 PM

0

On Dec 14, 1:33 pm, Iñaki Baz Castillo <i...@aliax.net> wrote:
> Hi, I'm getting crazy to get a theorically easy substitution:
>
> I've a file with a header:
>   X-Level: ***
> where the number of "*" is variable (from 0 up to 10).
>
> And I just want to replace "*" by "X", so get:
>   X-Level: XXX
>
> I don't get it since I don't know how to replace ANY number of "*" with the
> same number of "X" just in the header "X-Level".

Since I haven't seen the obvious answer yet...

text.tr('*','X')

-- Mark.

XY$

12/15/2008 5:17:00 PM

0

On Dec 15, 2:42 pm, Mark Thomas <m...@thomaszone.com> wrote:
> On Dec 14, 1:33 pm, Iñaki Baz Castillo <i...@aliax.net> wrote:
>
> > Hi, I'm getting crazy to get a theorically easy substitution:
>
> > I've a file with a header:
> >   X-Level: ***
> > where the number of "*" is variable (from 0 up to 10).
>
> > And I just want to replace "*" by "X", so get:
> >   X-Level: XXX
>
> > I don't get it since I don't know how to replace ANY number of "*" with the
> > same number of "X" just in the header "X-Level".
>
> Since I haven't seen the obvious answer yet...
>
> text.tr('*','X')
>
> -- Mark.

Mark,
The request was to make the replacement only in the header, isn't it?
:)

K

Shawn Anderson

12/15/2008 5:21:00 PM

0

not sure if I understand what you're trying to do.. but it sounds like ***
is a number right?
so
text.tr('*','X')
becomes
text.tr('\d','X')

HTH
/Shawn

On Mon, Dec 15, 2008 at 9:12 AM, XY$ <kwicher@gmail.com> wrote:

> On Dec 15, 2:42 pm, Mark Thomas <m...@thomaszone.com> wrote:
> > On Dec 14, 1:33 pm, I=F1aki Baz Castillo <i...@aliax.net> wrote:
> >
> > > Hi, I'm getting crazy to get a theorically easy substitution:
> >
> > > I've a file with a header:
> > > X-Level: ***
> > > where the number of "*" is variable (from 0 up to 10).
> >
> > > And I just want to replace "*" by "X", so get:
> > > X-Level: XXX
> >
> > > I don't get it since I don't know how to replace ANY number of "*" wi=
th
> the
> > > same number of "X" just in the header "X-Level".
> >
> > Since I haven't seen the obvious answer yet...
> >
> > text.tr('*','X')
> >
> > -- Mark.
>
> Mark,
> The request was to make the replacement only in the header, isn't it?
> :)
>
> K
>
>

David A. Black

12/15/2008 6:56:00 PM

0

Hi --

On Tue, 16 Dec 2008, Mark Thomas wrote:

>
>>> Since I haven't seen the obvious answer yet...
>>
>>> text.tr('*','X')
>>
>>> -- Mark.
>>
>> Mark,
>> The request was to make the replacement only in the header, isn't it?
>> :)
>
> excuse me...
>
> header.tr('*','X')
>
> Better? :)

If you can be sure you won't get any false positives. The original
question was how to change:

X-Level: ***

to

X-Level: XXX

I don't know whether * occurs on other lines.


David

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.r...
Coming in 2009: The Well-Grounded Rubyist (http://manning....)