8

私はWindowsでこのコマンドライン入力を持っています:

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ループに変更したりするなど、タスクを実行する他の方法に答えないでください。

4

2 に答える 2

12

パイプと特殊文字について次のように書かれているこのmicrosoft.comページを見つけました。

アンパサンド(&)、パイプ(|)、および括弧()は特殊文字であり、引数として渡すときにエスケープ文字(^)または引用符を前に付ける必要があります。

于 2012-09-28T19:17:10.257 に答える
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

二重引用符を試したとおっしゃっていましたが、実際に試したものを貼り付けると、他に何か問題があったかどうかがわかります。

于 2012-09-28T20:22:17.577 に答える