记事本++中的regex或sed返回两个不同的字符串

时间:2019-06-10 21:54:56

标签: regex linux notepad++

我有一个报告,其中包含有关服务器列表的信息。我想在此列表中搜索一定数量的正常运行时间,以及服务器的IP。我一直在使用notepad ++进行搜索,但是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

1 个答案:

答案 0 :(得分:0)

您实际上可以使用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

请参见online demo

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