正则表达式 - 验证IPv6 shell脚本

时间:2017-08-08 10:11:58

标签: regex bash shell

我可以使用带有以下正则表达式的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脚本中写这个?

1 个答案:

答案 0 :(得分:3)

显示的Java正则表达式也适用于bash,但请确保不要使用带引号的正则表达式变量。如果引用=~运算符右侧的变量或字符串,则将其视为字符串文字而不是正则表达式。

我还建议在正则表达式中使用锚点。否则,它将打印无效输入的匹配项: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