Forum: Ruby Ruby Command Line One Liner

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Alain H. (Guest)
on 2009-01-01 21:52
Hi,

I try to write a Ruby one-liner that replaces the header information of
some *.java files.

My first try worked perfect for a single file. But I have no idea on how
to change my one-liner to work with multiple files.

Here is my one-liner for a single file:

ruby -i.bak -p -e 'puts ARGF.read.gsub(/.*(?=package)/m,"/**\n * foo.bar
2001-2009\n\ **/\n")' test/Test.java

Does anybody have a idea on how to solve this problem for all *.java
files in the test directory?

Thanks for your answer,
Alain.
David A. Black (Guest)
on 2009-01-01 21:58
(Received via mailing list)
Hi --

On Fri, 2 Jan 2009, Alain H. wrote:

> ruby -i.bak -p -e 'puts ARGF.read.gsub(/.*(?=package)/m,"/**\n * foo.bar
> 2001-2009\n\ **/\n")' test/Test.java
>
> Does anybody have a idea on how to solve this problem for all *.java
> files in the test directory?

The -p flag will do the read/write loop for you, so all you have to do
is something like this:

$ cat abc.txt
hello
$ cat def.txt
goodbye

$ ruby -pi.bak -e '$_.upcase!' abc.txt def.txt

$ cat abc.txt
HELLO
$ cat def.txt
GOODBYE


David

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

http://www.wishsight.com => Independent, social wishlist management!
Hassan S. (Guest)
on 2009-01-01 22:35
(Received via mailing list)
On Thu, Jan 1, 2009 at 11:51 AM, Alain H.
<removed_email_address@domain.invalid> wrote:

> I try to write a Ruby one-liner that replaces the header information of
> some *.java files.
>
> My first try worked perfect for a single file. But I have no idea on how
> to change my one-liner to work with multiple files.

You might be interested in this: <http://rush.heroku.com/>
Alain H. (Guest)
on 2009-01-02 12:03
David A. Black wrote:
> Hi --
>
> On Fri, 2 Jan 2009, Alain H. wrote:
>
>> ruby -i.bak -p -e 'puts ARGF.read.gsub(/.*(?=package)/m,"/**\n * foo.bar
>> 2001-2009\n\ **/\n")' test/Test.java
>>
>> Does anybody have a idea on how to solve this problem for all *.java
>> files in the test directory?
>
> The -p flag will do the read/write loop for you, so all you have to do
> is something like this:
>
> $ cat abc.txt
> hello
> $ cat def.txt
> goodbye
>
> $ ruby -pi.bak -e '$_.upcase!' abc.txt def.txt
>
> $ cat abc.txt
> HELLO
> $ cat def.txt
> GOODBYE
>
>
> David
>
> --
> David A. Black / Ruby Power and Light, LLC
> Ruby/Rails consulting & training: http://www.rubypal.com
> Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2)
>
> http://www.wishsight.com => Independent, social wishlist management!

Thanks a lot for your answer.

The problem of the -p flag is, that the input stream is read line by
line. Then the regex /.*(?=package)/ will only be applied to one line.
But I want to remove all lines before the line starting with "package".
See the following example:

/**
 * header
 **/
package test;
...

The result of the replacement looks like this:

/**
 * foo.bar
 **/
package test;
...

If I use the one-liner at the top of the message with an input like
'test/Tes*.java' then the ARGF stream does somehow not differ between
the different files.

Best regards, Alain.
David A. Black (Guest)
on 2009-01-04 23:29
(Received via mailing list)
Hi --

On Fri, 2 Jan 2009, Alain H. wrote:

>>
>> $ cat abc.txt
>> Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2)
> /**
> package test;
> ...
>
> If I use the one-liner at the top of the message with an input like
> 'test/Tes*.java' then the ARGF stream does somehow not differ between
> the different files.

It sounds like you might want -n rather than -p. -n does the same
loop, but without printing. You could arrange to print once you've hit
/package/.


David

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

http://www.wishsight.com => Independent, social wishlist management!
unknown (Guest)
on 2009-01-05 22:11
(Received via mailing list)
On Jan 1, 1:51 pm, Alain H. <removed_email_address@domain.invalid> wrote:
> ruby -i.bak -p -e 'puts ARGF.read.gsub(/.*(?=package)/m,"/**\n * foo.bar
> 2001-2009\n\ **/\n")' test/Test.java
>
> Does anybody have a idea on how to solve this problem for all *.java
> files in the test directory?
>
> Thanks for your answer,
> Alain.
> --
> Posted viahttp://www.ruby-forum.com/.

ruby -i.bak -0777 -pe"sub /.*foo/m,'bar'" *.java
Alain H. (Guest)
on 2009-01-11 21:25
unknown wrote:
> On Jan 1, 1:51�pm, Alain H. <removed_email_address@domain.invalid> wrote:
>> ruby -i.bak -p -e 'puts ARGF.read.gsub(/.*(?=package)/m,"/**\n * foo.bar
>> 2001-2009\n\ **/\n")' test/Test.java
>>
>> Does anybody have a idea on how to solve this problem for all *.java
>> files in the test directory?
>>
>> Thanks for your answer,
>> Alain.
>> --
>> Posted viahttp://www.ruby-forum.com/.
>
> ruby -i.bak -0777 -pe"sub /.*foo/m,'bar'" *.java

Thanks a lot for the help.

The -0777 flag was the key to success, Alain.
This topic is locked and can not be replied to.