在使用Ruby执行命令行时,如何逃避垂直条?

时间:2012-09-28 17:41:52

标签: ruby windows cmd

我在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循环。

2 个答案:

答案 0 :(得分:10)

我发现this microsoft.com page表示以下关于管道和特殊字符的内容:

  

&符号(&),竖线(|)和括号()是特殊的   必须以转义字符(^)或。开头的字符   将它们作为参数传递时的引号。

答案 1 :(得分: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

我知道你提到你试过双引号,但是如果你粘贴了你实际尝试过的东西,我就能看出是否还有其他问题。