Ruby Command Line One Liner

Discussion in 'Ruby' started by Alain Helfenstein, Jan 1, 2009.

  1. 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.
    --
    Posted via http://www.ruby-forum.com/.
     
    Alain Helfenstein, Jan 1, 2009
    #1
    1. Advertising

  2. Hi --

    On Fri, 2 Jan 2009, Alain Helfenstein wrote:

    > 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?


    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!
     
    David A. Black, Jan 1, 2009
    #2
    1. Advertising

  3. On Thu, Jan 1, 2009 at 11:51 AM, Alain Helfenstein
    <> 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/>

    --
    Hassan Schroeder ------------------------
     
    Hassan Schroeder, Jan 1, 2009
    #3
  4. David A. Black wrote:
    > Hi --
    >
    > On Fri, 2 Jan 2009, Alain Helfenstein 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.

    --
    Posted via http://www.ruby-forum.com/.
     
    Alain Helfenstein, Jan 2, 2009
    #4
  5. Alain Helfenstein

    Guest

    On Jan 1, 1:51 pm, Alain Helfenstein <> wrote:
    > 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.
    > --
    > Posted viahttp://www.ruby-forum.com/.


    ruby -i.bak -0777 -pe"sub /.*foo/m,'bar'" *.java
     
    , Jan 5, 2009
    #5
  6. unknown wrote:
    > On Jan 1, 1:51�pm, Alain Helfenstein <> 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.
    --
    Posted via http://www.ruby-forum.com/.
     
    Alain Helfenstein, Jan 11, 2009
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mark
    Replies:
    8
    Views:
    110
    Tad McClellan
    Apr 29, 2004
  2. Larry
    Replies:
    1
    Views:
    121
    Martien Verbruggen
    Feb 3, 2005
  3. Oxnard
    Replies:
    13
    Views:
    227
    Fabian Pilkowski
    Jun 15, 2005
  4. Mike Pearson

    Single-liner for one-line substitute?

    Mike Pearson, Jun 28, 2006, in forum: Perl Misc
    Replies:
    13
    Views:
    214
    Xicheng Jia
    Jun 30, 2006
  5. boman
    Replies:
    13
    Views:
    274
    boman
    Aug 27, 2009
Loading...

Share This Page