【问题标题】:How to extract the month, day of month and IP address from the line using sed or awk?如何使用 sed 或 awk 从行中提取月份、日期和 IP 地址?
【发布时间】:2017-11-17 00:37:03
【问题描述】:

我已经提取了持续对我的 IMAP 服务器进行暴力破解的日期/月份和 IP:

Nov1 unknown[186.216.99.239]:
Nov1 unknown[62.249.196.214]:
Nov1 unknown[110.145.123.120]:
Nov1 fixed-187-190-251-149.totalplay.net[187.190.251.149]:
Nov1 pd9568164.dip0.t-ipconnect.de[217.86.129.100]:
Nov1 unknown[103.227.88.130]:

我希望输出如下所示:

Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

我通过以下代码结合使用 sed、awk 和 cut 实现了这个结果,但我想了解是否有更好的方法?

while read -r line
    do 
        monthday=$(echo $line | awk '{ print $1 }')
        # ip=$(echo $line | awk -F'[\\\[\\\]]' { print $2 } ) 
        ip=$(echo $line| cut -d[ -f2| cut -d] -f1 )
        echo "${monthday} ${ip}"
    done < badIpList.txt

【问题讨论】:

标签: bash awk sed


【解决方案1】:

使用 awk:将字段分隔符设置为空格,[],然后打印第一个和第三个字段:

$ awk -F "[][ ]" '{ print $1, $3 }' infile
Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

注意字段分隔符是一个正则表达式,即括号表达式[][ ]。来自gawk manual

要在括号表达式中包含字符\]-^,请在其前面放置\

所以表达式必须是

[\[\] ]

但因为存储在字符串 ("dynamic/computed regexps") 中的正则表达式被扫描两次,我们必须转义反斜杠:

-F '[\\[\\] ]'

或者像我一样使用双引号,我必须同时转义反斜杠和转义它的反斜杠:

-F "[\\\[\\\] ]"

这显然不太可读。幸好有个漏洞:

此外,如果您将 ] 放在开头的 [ 之后,则右括号将被视为要匹配的字符之一。

所以我们逃跑了

-F "[][ ]"

即使在双引号内。顺便说一句,这里没有真正的理由使用双引号。

【讨论】:

  • w 谢谢我多年来一直在想这个关于“[][]”的问题,现在它被清除了欢呼声:)
【解决方案2】:

awk解决方案:

awk -F'[[:space:]\\[\\]]' '{print $1,$3}' file
  • -F'[[:space:]\\[\\]]' - 复杂字段分隔符,空格 [:space:][]。因此,这条线,例如。 Nov1 unknown[186.216.99.239]: 将分为以下几个字段:1) Nov1, 2) unknown, 3) 186.216.99.239 和 4) :

输出:

Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

【讨论】:

  • 我觉得它简单易懂 :) 你介意描述一下吗?
  • @satch_boogie,是的,看我的解释
【解决方案3】:

试试这个

sed -E 's/\s.*\[(.*)\]:/ \1/' file

不需要循环。

【讨论】:

    【解决方案4】:

    这个 sed 很简单:

    $ sed -r 's|^([^ ]*)[^[]*\[([^]]*)\].*|\1 \2|' badIpList.txt
    Nov1 186.216.99.239
    Nov1 62.249.196.214
    Nov1 110.145.123.120
    Nov1 187.190.251.149
    Nov1 217.86.129.100
    Nov1 103.227.88.130
    

    逻辑:打印第一个单词和方括号的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-20
      • 2020-10-24
      • 2021-04-02
      • 1970-01-01
      • 2017-06-11
      • 2021-10-02
      • 2018-02-16
      相关资源
      最近更新 更多