gpt4 book ai didi

regex - AWK 支持 ipv4 CIDR 表示法的正则表达式

转载 作者:行者123 更新时间:2023-12-03 07:51:20 30 4
gpt4 key购买 nike

我正在使用 awk 来解析一些 CIDR,我需要一些东西来匹配以下地址:160.0.0.0/24

但不是:160.0.0.0/24aaa57

因此它应该仅在有效 CIDR 表示法的情况下匹配。另外,如果我理解正确的话 awk 没有/d 等等。

这是一个例子:

awk '$0 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\// {print $0}' somefile.txt

最佳答案

有效的 CIDR 不仅仅意味着由句点分隔的四组数字。有效的 CIDR 要求每个数字介于 0255 之间。此外,子网掩码必须介于 /0/32 之间。或者它可能根本不存在,这意味着 /32

https://www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html :

\b(?:(?: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]?)\b

将是一个很好的正则表达式来满足四个点分八位组。添加子网掩码将导致:

\b(?:(?: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]?)(/(?:3[0-2]|[0-2]?[0-9]))?\b

示例输出:

sridhar@ganymede:~> cat ip-test.txt 
172.20.128.1
172.228.202.1/24
172.268.200.2/2444
138.22.2222/1
10.0.0.1/33
10.0.0.1/32
10.0.0/24
sridhar@ganymede:~> egrep -o '\b(?:(?: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]?)(/(?:3[0-2]|[0-2]?[0-9]))?\b' ip-test.txt
172.20.128.1
172.228.202.1/24
10.0.0.1
10.0.0.1/32
sridhar@ganymede:~>

关于regex - AWK 支持 ipv4 CIDR 表示法的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77069501/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com