首页 > 解决方案 > 我如何用现金编写正则表达式以获得 162-175 范围内的 ips 和环回地址

问题描述

嘿,我正在尝试编写一个正则表达式 bash 表达式来获取以 127 开头的地址和介于 162-175 之间的地址,谁能纠正我的错误

sed -n 's/\([0-9]\{3\}\.\)\{3\}[0-9]\{1,3\}/\nip&\n/gp' ips.txt | grep ip | sed 's/ip//'| sort | uniq | cut -d " " -f 1

标签: pythonlinuxbashshell

解决方案


awk 可能是一个更好的工具:

awk '{ 
        if ( match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/)) { 
                  split(substr($0,RSTART,RLENGTH),map,".");
                  if ( map[1] == 127 || ( map[1] >= 162 && map[1] <= 175 ) ) { 
                            print $0 
                   } 
        } 
      }' file

一个班轮:

awk '{ if ( match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/)) { split(substr($0,RSTART,RLENGTH),map,".");if ( map[1] == 127 || ( map[1] >= 162 && map[1] <= 175 ) ) { print $0 } } }' file

对于每一行,使用 awk 的 match 函数对 ip 地址进行模式匹配。使用 awk 的 split 函数获取该 IP 地址的第一个元素,该元素位于数组映射的第一个索引中。检查此 map[1] 值是否等于 127 或介于 162 和 175 之间。如果满足这些条件,则打印该行


推荐阅读