我试图让用户只输入一个有效的mac地址(即0a:1b:2c:3d:4e:5f),并希望它比扩展形式更简洁:
[[ $MAC_ADDRESS =~ [a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9] ]]
有没有办法像这样做?
[[ $MAC_ADDRESS =~ ([a-zA-Z0-9]{2}:){5}[a-zA-Z0-9]{2} ]]
基本上,我想创建一个由两个字母数字字符后跟冒号组成的“组”,然后重复五次。我已经尝试了所有我能想到的东西,我很确定这样的事情是可能的。
答案 0 :(得分:7)
我建议使用^
和$
来确保没有其他内容:
[[ "$MAC_ADDRESS" =~ ^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$ ]] && echo "valid" || echo "invalid"
编辑:要在BASH ver 3.1
上使用正则表达式,您需要引用正则表达式,因此以下操作应该有效:
[[ "$MAC_ADDRESS" =~ "^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$" ]] && echo "valid" || echo "invalid"
答案 1 :(得分:2)
你实际上非常接近你的建议。而不是A到Z,只需去A到F.
^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$