如何将正则表达式与灰匹配?

时间:2014-01-09 02:58:33

标签: regex busybox ash

以下代码适用于bash,但现在我需要它用于busybox ash,它显然没有“=〜”

keyword="^Cookie: (.*)$"
if [[ $line =~ $keyword ]]
then
bla bla
fi

是否有合适的替代品?

很抱歉,如果这是超级用户问题,则无法决定。

编辑:也没有grep,sed,awk等。我需要纯灰。

3 个答案:

答案 0 :(得分:4)

对于特定正则表达式,您可能会遇到parameter expansion hack:

if [ "$line" = "Cookie: ${line#Cookie: }" ]; then
    echo a
fi

pattern matching notation +案例黑客:

case "$line" in
    "Cookie: "*)
        echo a
    ;;
    *)
    ;;
esac

然而,这些解决方案的强大程度远低于regexes,因为它们没有真正的Kleene星*(只有.*),你应该真的获得更多在该系统上安装的强大工具(像Python这样真正的编程语言?)或受损。

答案 1 :(得分:2)

Busybox附带一个expr小程序,可以进行正则表达式匹配(锚定到字符串的开头)。如果正则表达式匹配,则其返回码为0.示例:

 # expr "abc" : "[ab]*"
 # echo $?
 0
 # expr "abc" : "[d]*"
 # echo $?
 1

答案 2 :(得分:0)

对我有用的是使用grepwc的Busy Box实现:

MATCHES=`echo "$BRANCH" | grep -iE '^(master|release)' | wc -l`
if [ $MATCHES -eq 0 ]; then
 echo 'Not on master or release branch'
fi