一种在大型文本文件中提取IP:port; data出现次数的方法?

时间:2018-08-08 05:22:24

标签: regex

我正在尝试寻找一种方法来提取大文本文件中所有出现的IP:Port; Data。
txt文件中的数据采用以下格式:

IP      :   Port    ;   IDM     [Random data]

10.255.74.66:4195;Wmr!1[Vaf3tgLpOTGtfhS]<br>
11.255.74.67:6741;Wmr2[Pc44bCM4ltw50]<br>
12.255.74.68:3951;Wmr#3a[eSTrTaiN2BzygX]<br>
14.255.74.69:3486;Wmr4b1#[Gytkt2JuH768LD]<br>

预期输出应为:

IP      :   Port    ;   IDM

10.255.74.66:4195;Wmr!1<br>
11.255.74.67:6741;Wmr2<br>
12.255.74.68:3951;Wmr#3a<br>
14.255.74.69:3486;Wmr4b1#<br>

花了几个小时寻找解决方案后,我以这个结尾:

cat data.txt | grep -Po "(([0-1](\d\d?)?|2([0-4]\d?|5[0-5]?|[6-9])?|[3-9]\d?)\.){3}([0-1](\d\d?)?|2([0-4]\d?|5[0-5]?|[6-9])?|[3-9]\d?)(:([0-5](\d(\d(\d\d?)?)?)?|6([0-4](\d(\d\d?)?)?|5([0-4](\d\d?)?|5([0-2]\d?|3[0-5]?|[4-9])?|[6-9]\d?)?|[6-9](\d\d?)?)?|[7-9](\d(\d\d?)?)?))?" | sort | uniq >> results.txt

但是无法正常工作。它仅提取IP:port

如果有人对此有解决方案,我将非常感激。

2 个答案:

答案 0 :(得分:1)

与其尝试匹配所需的所有内容,不如匹配直到您不需要的第一个字符为止。

以下从行首开始匹配,直到(不包括)第一个方括号

^.*(?=\[)?

答案 1 :(得分:0)

您可以断定字符串^的开头,然后使用否定的character class [^[]+

一次或多次不匹配左括号。

^[^[]+