From: Alain Helfenstein Date: 2009-01-02T19:02:36+09:00 Subject: Re: Ruby Command Line One Liner 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/.