【问题标题】:How to clean up masscan output (-oL)如何清理 masscan 输出 (-oL)
【发布时间】:2016-10-30 01:56:40
【问题描述】:

我对带有 -oL 选项的 masscan 实用程序产生的输出有疑问(“grep-able”输出);例如,它输出:

Host: 143.137.155.7 ()  Ports: 80/open/tcp////
Host: 177.105.21.41 ()  Ports: 8080/open/tcp////
Host: 187.78.236.98 ()  Ports: 80/open/tcp////
Host: 177.137.76.220 () Ports: 8080/open/tcp////
Host: 177.105.10.112 () Ports: 9000/open/tcp////
Host: 191.232.34.9 ()   Ports: 80/open/tcp////
Host: 179.55.65.144 ()  Ports: 80/open/tcp////
Host: 177.83.203.147 () Ports: 8080/open/tcp////
Host: 177.182.50.124 () Ports: 8000/open/tcp////

上面的内容既不可读也不容易理解。

如何使用 Linux 命令行实用程序,例如sed、awk 或 grep,使用上面的文件输出如下内容?

143.137.155.7:80
177.105.21.41:8080
187.78.236.98:80
177.137.76.220:8080
177.105.10.112:9000

【问题讨论】:

    标签: bash awk sed output


    【解决方案1】:

    怎么样

    sed 's/^Host: \([0-9.]*\).*Ports: \([0-9]*\).*$/\1:\2/g'
    

    解释:

    • s/regex/replacement/regex 替换为 replacement
    • ^ 匹配字符串的开头
    • Host: 匹配自身
    • [0-9.] 是匹配数字 0 到 9 和 . 的字符范围
    • [0-9.]* 匹配零个或多个数字/点
    • \([0-9.]*\) 使匹配的 IP 地址在替换中可用为 \1
    • . 匹配任何单个字符
    • .* 匹配零个或多个单个字符(即任何字符串)
    • Ports: 匹配自身
    • \([0-9]*\) 匹配一串数字并使其可用作\2
    • .*$ 匹配字符串的其余部分

    最后的标志g 将替换应用于所有匹配项,而不是每行的第一个匹配项。在这种情况下,只能有一个匹配项(整行),因此标志不会做任何事情。我是出于习惯打出来的。

    【讨论】:

      【解决方案2】:

      awk 可以将正则表达式作为分隔符。在 / 或 1+ 个空格上拆分,然后打印列。

      awk -F '[/ ]+' '{print $2 ":" $5}'
      

      【讨论】:

        【解决方案3】:

        虽然汤姆的答案可能是最适合这项工作的答案,但有其他选择也无妨。

        使用awkcut

        awk 'OFS=":" {print $2,$5}' | cut -d/ -f-1
        

        awk 中几乎可以肯定有一种更有效的方法可以完全做到这一点,但我不确定具体如何。

        【讨论】:

          【解决方案4】:
          awk  -F'[ /]' '{print $2":"$(NF-6)}/9000/{exit}' file
          
          143.137.155.7:80
          177.105.21.41:8080
          187.78.236.98:80
          177.137.76.220:8080
          177.105.10.112:9000
          

          【讨论】:

          • 为什么需要/9000/{exit}?我试着只打印 2 美元和 5 美元,对我来说效果很好
          • @JayRajput 问题中的预期输出只有前 5 行。我认为 Claes 将其理解为一项要求(“仅显示具有端口 9000 的行”),但更可能的是 OP 没有费心编写剩余的行。
          • 为了将输出限制为 5 行。
          • 谢谢。现在明白了。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-01
          • 1970-01-01
          • 2014-08-12
          • 2015-03-21
          • 1970-01-01
          相关资源
          最近更新 更多