字符匹配的问题

字符匹配的问题

对于expr进行字符串匹配不是特别清楚,expr $ip:~[1-9]\{1\}[0-9]\{0,2\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$ 为什么匹配不出来呢?      
你想做什么?      
[QUOTE]最初由 mouse81 发布
[B]对于expr进行字符串匹配不是特别清楚,expr $ip:~[1-9]\{1\}[0-9]\{0,2\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$ 为什么匹配不出来呢? [/B][/QUOTE]
我想用expr匹配ip地址      
版主请帮帮忙!在使用expr老是用不起它的字符匹配模式      
具体点儿,怎样匹配 IP 地址?      
当调用我的shell脚本时,对于参数进行ip检查如果对的这通过,否则就报错      
我写了与其相同的expr匹配方式,还是不行time="10:10"
if expr $time : `[0-9]\{2\}:[0-9]{2\}` ; then
        echo "right"
else
        echo "wrong"
        echo $?
fi      
用 grep:
复制内容到剪贴板
代码:
#! /bin/bash

[ $# != 1 ] && {
    echo "usage:"
    echo "  $(basename $0) <ip>"
    exit 1
}

if echo "$1" | grep -q '^\([0-9]\+\.\)\{3\}[0-9\+]$'
then
    echo ok
else
    echo error
fi
注:没有严格的格式检查,如 888.888.888.888 也认为是合法的      
[QUOTE]最初由 dearvoid 发布
[B]用 grep:
复制内容到剪贴板
代码:
#! /bin/bash

[ $# != 1 ] && {
    echo "usage:"
    echo "  $(basename $0) <ip>"
    exit 1
}

if echo "$1" | grep -q '^\([0-9]\+\.\)\{3\}[0-9\+]$'
then
    echo ok
else
    echo error
fi
注:没有严格的格式检查,如 888.888.888.888 也认为是合法的 [/B][/QUOTE]
^\([0-9]\+\.\)\{3\}[0-9\+]$能够详细解释一下吗?\)\这个是什么意思?为什么要用[0-9\+]$?在shell中()这个有什么意思,不好意思我是个新手;)      
呵呵,一时也说不清楚,回去找找 grep 的资料看吧
man grep