2012-09-28 11 views
6

私はWindowsでこのコマンドライン入力を持っている:Rubyでコマンドラインを実行するとき、どのように垂直バーからエスケープできますか?

dir /b | ruby -ne 'f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};' 

この行はそれでhelloworldと、現在のディレクトリの下にあるすべてのファイルを見つけることです。

この行はline is not a valid commandを言って、エラーを与える:

私の質問は(私はそこにこれを行うには他の多くの方法があるが、ポストはそれに焦点を当てていない理解します)。その後、ブロック変数のブレースとしてRubyで|を実現しました。cmdのパイプ記号です。私は行全体を二重引用符に変更しようとしました。サインは成功しません。どうすれば縦棒を逃れることができますか?

grep、find、sed、awkなどの他のツールを使用したり、ブロックをforループに変更したりするなど、他の方法では対応しないでください。

答えて

9

私はパイプや特殊文字については、以下を言うthis microsoft.com pageを見つけました:

アンパサンド(&)、パイプ(|)、および括弧()エスケープが先行されなければならない特別な 文字があります文字(^)または を引用符で囲みます。

2

一重引用符が問題のようです。代わりに二重引用符を使用してください。なぜなら、それらはWindowsで必要とされるからです(Unixでもどちらも理解できるが)。

これは、Windowsで私の作品:

C:\tmp\ruby>echo helloworld > foo.txt 

C:\tmp\ruby>dir /b | ruby -ne "f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};" 
foo.txt 

私はあなたが二重引用符をしようとしたことを述べたが、知っているあなたは、あなたが実際に試したものを貼り付ける場合、何か他のものが間違っていた場合、私は見ることができます。

+0

実際に動作します!私は試しましたが、試してみました。 \でエスケープされていますが、エスケープしないと試してみることはできませんでした。 – texasbruce

+0

@texasbruceそれを聞いてうれしい。これはプログラミングの現実の1つです。また、OSの多くの機能を理解する必要があります。私の答えがあなたの問題を解決したら、受け入れを検討してください。 – Kelvin

関連する問題