我在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循环。
答案 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
我知道你提到你试过双引号,但是如果你粘贴了你实际尝试过的东西,我就能看出是否还有其他问题。