如何检查字符串是否包含shell中正则表达式中的字符?

时间:2013-11-08 02:25:38

标签: regex string bash

如何在纯bash中检查变量是否包含(正则表达式) 其他而不是0-9a-z-的字符?

我需要有条件的检查。如果字符串包含的字符不仅仅是上面接受的字符exit 1

3 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是使用grep命令,如下所示:

 grep -qv "[^0-9a-z-]" <<< $STRING

然后,您要求grep返回的值包含以下内容:

if [ ! $? -eq 0 ]; then
    echo "Wrong string"
    exit 1
fi

正如@mpapis指出的那样,你可以将上面的表达式简化为:

grep -qv "[^0-9a-z-]" <<< $STRING || exit 1

您也可以使用bash =~运算符,如下所示:

if [[ ! "$STRING" =~ [^0-9a-z-] ]] ; then  
    echo "Valid"; 
else 
    echo "Not valid"; 
fi

答案 1 :(得分:2)

case支持匹配:

case "$string" in
  (+(-[[:alnum:]-])) true ;;
  (*) exit 1 ;;
esac

格式不是纯粹的正则表达式,但它的工作速度比使用grep的单独进程更快 - 如果您要进行多次检查,这很重要。

答案 2 :(得分:0)

使用Bash的替换引擎测试$ foo是否包含$ bar

bar='[^0-9a-z-]'
if [ -n "$foo" -a -z "${foo/*$bar*}" ] ; then
  echo exit 1
fi