我需要在ruby脚本中使用regex选项运行Linux find命令,但它似乎不起作用。所有命令都是查找扩展名为rb或erb或js的文件。我知道命令本身很好,因为我可以在命令提示符窗口中运行它。
以下是我要运行的find命令:
find . -regex ".*\.\(rb\|erb\|js\)"
这是我的ruby脚本的样子:
#!/usr/bin/env ruby
files = `find . -regex ".*\.\(rb\|erb\|js\)"`
puts files
我知道我可以使用-name选项而不是正则表达式,但似乎正则表达式应该可行。此外,我能够在我的ruby脚本中使用命令find . -regex ".*\.rb"
。它似乎几乎与括号或管道有问题?
任何建议/帮助将不胜感激。谢谢!
答案 0 :(得分:1)
来自stribizhev's comment的猜测是正确的:向后引号中的命令文字与双引号("
)中的字符串文字相同,具有相同的转义和替换/字符串插值规则。
单引号中的字符串文字('
)按字面意思保留,因此以下内容应该无需双重逃避头痛:
#!/usr/bin/env ruby
command = 'find . -regex ".*\.\(rb\|erb\|js\)"'
files = `#{command}`
puts files
答案 1 :(得分:0)
Ruby具有shellescape https://apidock.com/ruby/String/shellescape,可让您显式转义要传递给Unix样式shell的参数。您的示例可能写为
`find . -regex #{Shellwords.shellescape ".*\.\(rb\|erb\|js\)"}`