Regex 正则表达式运算符和grep-E失败
我在这里找到了最适合我需要的正则表达式: 但当我用bash regex操作符测试它时,它总是失败:Regex 正则表达式运算符和grep-E失败,regex,bash,Regex,Bash,我在这里找到了最适合我需要的正则表达式: 但当我用bash regex操作符测试它时,它总是失败: if [[ 'ABC' =~ ^(?!.*(.).*\1)[ABC]+$ ]]; then echo "success" else echo "fail" fi 我也用grep试过: echo "ABC" | grep -E "^(?!.*(.).*\1)[ABC]+$" 但是我得到
if [[ 'ABC' =~ ^(?!.*(.).*\1)[ABC]+$ ]]; then
echo "success"
else
echo "fail"
fi
我也用grep试过:
echo "ABC" | grep -E "^(?!.*(.).*\1)[ABC]+$"
但是我得到了“grep:Invalid back reference”POSIX ERE中不支持查找,因此需要引入第二个条件:
s='ABCC'
rx1='^[ABC]+$'
rx2='().*\1'
如果[[“$s”=~$rx1&!”$s”=~$rx2]];然后
呼应“成功”
其他的
回应“失败”
fi
看
详情:
-检查整个“$s”=~^[ABC]+$
字符串是否由一个或多个s
、A
或B
字符组成C
-另一个条件要求&&!“$s”=~().*\1
字符串没有重复字符s
-p
:
echo "ABC" | grep -P '^(?!.*(.).*\1)[ABC]+$'
这是完美的,但是,它只适用于GNU grep。ABCC给出“成功”而不是失败:(@Giulio让我们使用最佳实践,用分配给变量的单引号字符串定义正则表达式模式。这样shell就不会用转义来欺骗我们。这种方法如预期的那样工作,并且在Bash中工作,而不依赖于是否有GNU grep。