我可以使用带有以下正则表达式的java来验证IPv6地址:
([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}
但是我需要在我刚接触的shell脚本中这样做。
这个正则表达式似乎不适用于shell。尝试了其他一些组合,但没有任何帮助。
#!/bin/bash
regex="([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}"
var="$1"
if [[ "$var" =~ "$regex" ]]
then
echo "matches"
else
echo "doesn't match!"
fi
它为 2001:0Db8:85a3:0000:0000:8a2e:0370:7334
提供输出不匹配!我怎样才能在shell脚本中写这个?
答案 0 :(得分:3)
=~
运算符右侧的变量或字符串,则将其视为字符串文字而不是正则表达式。
我还建议在正则表达式中使用锚点。否则,它将打印无效输入的匹配项:2001:0db8:85a3:0000:0000:8a2e:0370:7334:foo:bar:baz
。
以下脚本应该适合您:
#!/bin/bash
regex='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$'
var="$1"
if [[ $var =~ $regex ]]; then
echo "matches"
else
echo "doesn't match!"
fi