我有一个基本的IP正则表达式,用于检查ip是否在0.0.0.0到255.255.255.255之间。当我进入的时候
grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" file.txt它总共匹配12个ip地址(这对于我的文本文件是正确的),但当我需要它来突出显示第四个八位字节时,它只突出显示前3个八位字节。但将其更改为"{4}“时未显示任何匹配项。
grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}" file.txt我的快速问题是,为什么不使用{4}突出显示全部4个八位字节作为匹配
发布于 2017-08-17 17:21:10
它不匹配第四个二进制八位数,因为表达式匹配一个二进制八位数,然后恰好. 3次。由于第4个二进制八位数之后没有.,因此它不匹配,也不突出显示。
您可以使用
grep -E "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.?){4}"在这里,\.?匹配1或0个.字符(即.是可选的,因此第四个八位字节现在将匹配并突出显示)。
或者,一个更精确的模式也可以做到:
grep -E "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}"它将匹配并突出显示整个IP地址字符串。
您可以根据自己的要求在模式中添加锚点或单词边界。例如,以下是单词边界模式的变体:
grep -E "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\b"

https://stackoverflow.com/questions/45731025
复制相似问题