2014-03-24 71 views
1

我想要做的事:如何通過空格或製表符分割命令輸出?

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(或我指定的任何其他端口)。

回答

3

不帶參數的一個普通的分裂就已經做你想要什麼:

input.lines.map do |line| 
    proto, local, foreign, state, pid = line.split 
    pid 
end 
#=> ["1800", "8780", "5540"] 

你的代碼有,我想雖然指出幾個問題,也許你可以從中學到這個東西:

  • 您正在使用gsubstrip,它實際上從未改變input。您可能需要使用gsub!strip!(增變器)。 split但是沒有相應的mutator,因爲它的返回值是一個數組而不是一個字符串。
  • input[4]簡單地給你input
+0

他想匹配'80'字符串,沒有那麼多字符。 – Max

+0

@Max啊我明白了,謝謝你的糾正。 –

1

的第四個字符,您可以通過匹配單詞邊界匹配80,而不是,比方說,8080

grep '\<80\>' 

但是,如果你使用的是Ruby,爲什麼要用grep來完成?只需使用正則表達式! Ruby的語法略有不同:

/\b80\b/ 
相關問題