简体   繁体   English

匹配tcl中的IP地址而不匹配点号字符串

[英]Matching IP address in tcl without matching dotted strings

I'm trying to find all the IP addresses in a file and replace it with this pattern " * " but I end up matching dotted strings which look like IP addresses and replace/mangle them as well. 我试图在文件中查找所有IP地址,并用“ * ”模式替换它,但最终匹配了看起来像IP地址的点缀字符串,并替换/修改了它们。 Is there way out here? 这里有出口吗? Maybe use tcl built in functions in the ip package? 也许使用ip包中内置的tcl功能?

The code looks something like this: 代码看起来像这样:

proc hide_ip { in_file } \
{
    set input_file [open $in_file]
    set file_content [read $input_file]
    set changed false 


    set ip_tags [list {(((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))\.((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))\.((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))\.((25[0-5])|(2[0-4]\d)|(1\d\d)|(0?\d?\d))(/((3[0-2])|([1-2]?\d)))?)} \
                      {(((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?(/((12[0-8])|(1[0-1]\d)|(0?\d?\d)))?)}]

foreach item $ip_tags {
        set substituted [regsub -all -line -- $item $file_content {***} file_content]
        set changed [expr {$changed || $substituted}]
    }

...

192.168.1.1 --> This should match 192.168.1.1->这应该匹配

12.192.168.1.1.567 --> This should NOT match 12.192.168.1.1.567->这不应该匹配

您可以使用\\b标记正则表达式的边界,使其与12.192.168.1.1.567的边界不匹配。

如果要匹配192.168.1.1而不是12.192.168.1.1.567 ,则可以使用负数前瞻排除第二个匹配项。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM