我正在尝试寻找一种方法来提取大文本文件中所有出现的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
如果有人对此有解决方案,我将非常感激。
答案 0 :(得分:1)
与其尝试匹配所需的所有内容,不如匹配直到您不需要的第一个字符为止。
以下从行首开始匹配,直到(不包括)第一个方括号
^.*(?=\[)?
答案 1 :(得分:0)
您可以断定字符串^
的开头,然后使用否定的character class [^[]+