linux系统调用时的Ruby模式匹配
被一点代码卡住了。我研究了一种方法,如果我的系统调用结果与变量中的短语集匹配,则返回true。我尝试了一些方法,比如将系统调用转换为字符串。此外,以下是我到目前为止所做的尝试:linux系统调用时的Ruby模式匹配,ruby,regex,linux,Ruby,Regex,Linux,被一点代码卡住了。我研究了一种方法,如果我的系统调用结果与变量中的短语集匹配,则返回true。我尝试了一些方法,比如将系统调用转换为字符串。此外,以下是我到目前为止所做的尝试: def pattern_test test = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"') word = /String I Want To Match/i puts
def pattern_test
test = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
word = /String I Want To Match/i
puts test === word ? "True" : "False"
end
pattern_test
def pattern_test2
test2 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
word2 = "String I Want To Match"
puts test2 =~ word2 ? "True2" : "False2"
end
pattern_test2
def pattern_test3
test3 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
word3 = "String I Want To Match"
puts test3 =~ word3 ? "True3" : "False3"
end
pattern_test3
def pattern_test4
test4 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"').to_s
word4 = "String I Want To Match"
puts test4 === word4 ? "True4" : "False4"
end
pattern_test4
结果是:
String I Want To Match
False
String I Want To Match
False2
String I Want To Match
False3
String I Want To Match
False4
我的预期结果将是返回true,因为测试和单词匹配
更新
我试过一些建议,但也不管用。以下是我尝试过的其他一些方法:
def模式测试
test = `rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"`
word = /String I Want To Match/i
puts test === word ? "True" : "False"
end
pattern_test
def pattern_test2
test2 = %x(rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match")
word2 = 'String I Want To Match'
puts test2 === word2 ? "True" : "False"
end
pattern_test2
def pattern_test3
test3 = IO.popen('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
word3 = "String I Want To Match"
puts test3 === word3 ? "True" : "False"
end
pattern_test3
def pattern_test4
test4 = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
word4 = 'String I Want To Match'
puts test4 === word4 ? "True" : "False"
end
pattern_test4
这是输出:
False
False
False
String I Want To Match
False
更新2
我忘了对每个评论再测试一件事。这是可行的,但我不确定这是最好的方法:
def pattern_test
test = system('rpm -q --queryformat "%{SUMMARY}\n" some-package | grep -o "String I Want To Match"')
puts test4 == true ? "True" : "False"
end
pattern_test
system()的返回值不是程序的退出状态吗?那么也许test==0?真:假;我认为,如果您使用bacticks而不是system(),您将得到命令的stdout。“如果命令给出零退出状态,系统将返回true,如果命令执行失败,系统将返回false。”。Backticks、
%x(…)
、或其中一个popen
或Open3
命令更像您想要的。