我要求this question为网站上描述的特定模式获取正确的grep命令。现在我正在尝试处理文本文件 - 我在每一行使用修改的模式grep,如果grep返回匹配,我想采取一些操作。我的代码或多或少看起来像这样:
file.each_line do |line|
myVariable = `echo '#{line}' | grep -P '>(?!((?:[^)]|\((?1)\))*)$)'`
if myVariable == '' doSomething else doOtherThing end
end
每次调用echo-grep行都会显示:
grep: recursive call could loop indefinitely
并返回一个空字符串 - 表示错误。
现在我也在运行类似的行:
myVariable = `echo "#{line}" | grep -P '>(?!((?:[^]]|\[(?1)\])*)$)'`
但这条线路正常。
现在我为每一行输入都收到了这条消息,但是这一行肯定会给出错误输出:
example <something>
请注意,在命令行中使用echo或on file运行相同的命令,效果很好。
鉴于所有信息,问题是:
我应该怎么做才能消除错误信息,并使这个grep调用工作?
答案 0 :(得分:1)
答案 1 :(得分:0)
事实证明,在Ruby中,您需要使用另一个\
转义\
个字符。因此,合并vks's answer,我们得到:
myVariable = `echo "#{line}" | grep -P '<[^>]*>(?=[^\\[]*\\])'`
myVariable = `echo "#{line}" | grep -P '<[^>]*>(?=[^\\(]*\\))'`
分别适用于[]或()。