繁体   English   中英

如何使用sed或awk从行中提取月份,日期和IP地址?

[英]How to extract the month, day of month and IP address from the line using sed or awk?

我已经提取了持续强制我的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

使用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手册

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

所以表达必须是

[\[\] ]

但由于存储在字符串中的正则表达式(“ 动态/计算的正则表达式”)被扫描两次 ,我们必须转义反斜杠:

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

或者使用双引号,就像我一样,我必须逃避反斜杠和反斜杠逃避它:

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

这显然不是太可读。 谢天谢地,有一个漏洞:

此外,如果放置]在打开后立即[ ,闭合托架被视为要匹配的字符之一。

所以我们侥幸逃脱

-F "[][ ]"

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

尝试这个

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

不需要循环。

awk解决方案:

awk -F'[[:space:]\\[\\]]' '{print $1,$3}' file
  • -F'[[:space:]\\\\[\\\\]]' - 复杂的字段分隔符,可以是空格[:space:][] 因此,该行,例如。 Nov1 unknown[186.216.99.239]:将分为以下几个领域:1) Nov1月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

这个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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM