我试图这样做:
input = %x{netstat -ano | grep ^:80}
input.gsub(/\s+\t/m,' ').strip.split(" ")
puts input[4]
但是我得到了C
的输出,我预期<pid>
netstat命令的示例输出是:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 1800
TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING 8780
TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 5540
此外,我不确定如何使grep
完全匹配 80
(或我指定的任何其他端口)。
答案 0 :(得分:3)
没有参数的普通拆分已经可以做你想要的了:
input.lines.map do |line|
proto, local, foreign, state, pid = line.split
pid
end
#=> ["1800", "8780", "5540"]
你的代码有几个我想指出的问题,也许你可以从中学到一些东西:
gsub
和strip
从未实际更改input
。您可能希望使用gsub!
和strip!
(mutators)来实现此目的。 split
但是没有mutator等价物,因为它的返回值是一个数组,而不是一个字符串。input[4]
只是为您提供了input
字符串答案 1 :(得分:1)
您可以通过匹配字边界来匹配80
而不是8080
。
grep '\<80\>'
但是如果你正在使用Ruby,为什么还要使用grep呢?只需使用正则表达式! Ruby的语法略有不同:
/\b80\b/