记事本++或sed中的正则表达式返回两个不同的字符串



我有一个报告,其中包含有关服务器列表的信息。 我想在此列表中搜索超过一定数量的正常运行时间,以及服务器的IP。 我一直在使用记事本++进行搜索,但是sed语法也可以。 该报告包含如下数据:

some.dns.com
up 720 days,
some version
several lines of disk space information, between 14 and 16 lines
Connection to 10.1.1.1 closed.
some.other.dns
up 132 days,
some version
several lines of disk space information, between 14 and 16 lines
Connection to 10.1.1.2 closed.

到目前为止,我已经提出了以下内容,这给了我需要的正常运行时间阈值:

up ([9-9]d|d{3,} days,)

但是我还需要IP地址来理解它,并且无法找到一种方法来获取与正常运行时间长的服务器相关的IP。

我找到了这样的东西来查找 IP 地址:

((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))

因此,我希望返回如下内容:

up 720 days,
10.1.1.1

您实际上可以使用awk

awk -F"n" -v RS="" '$0 ~ /up (9[0-9]|[0-9]{3,}) days/{gsub(/Connection to | closed./, "", $NF); print $1 "n" $NF}' file > newfile

观看在线演示

逐段读取文件,并用换行符分隔字段。如果一条记录与up (9[0-9]|[0-9]{3,}) days模式匹配(up与空格匹配,则9后跟任何数字或任意 3 位数字后跟空格和days,则最后一个字段 ( $NF ( 将从静态文本中删除,并打印第一个和最后一个文件。

最新更新