【问题标题】:How do I split command output by space or tab?如何按空格或制表符拆分命令输出?
【发布时间】:2014-05-02 00:47:16
【问题描述】:

我正在努力:

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

【问题讨论】:

    标签: ruby arrays split grep


    【解决方案1】:

    没有参数的普通拆分已经可以满足您的需求:

    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 字符串的第四个字符

    【讨论】:

      【解决方案2】:

      您可以通过匹配单词边界来匹配80 而不是8080

      grep '\<80\>'
      

      但是,如果您使用的是 Ruby,为什么还要使用 grep 呢?只需使用正则表达式! Ruby 的语法略有不同:

      /\b80\b/
      

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 2013-06-21
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 2022-12-31
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        相关资源
        最近更新 更多