gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:37:33 26 4
gpt4 key购买 nike

我已经提取了持续暴力破解我的 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 manual :

To include one of the characters \, ], -, or ^ in a bracket expression, put a \ in front of it.

所以表达式必须是

[\[\] ]

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

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

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

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

这显然不太可读。值得庆幸的是,有一个漏洞:

Additionally, if you place ] right after the opening [, the closing bracket is treated as one of the characters to be matched.

所以我们逃脱了

-F "[][ ]"

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

关于bash - 如何使用 sed 或 awk 从行中提取月份、日期和 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47333893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com