unix中的regex有什么问题?
echo AB345678 | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p'
echo 12345678 | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p'
我没有得到输出:(
我的意思是我回应的字符串为什么它与我的正则表达式不匹配? 我的正则表达式怎么了?
答案 0 :(得分:2)
BRE正则表达式语法中的交替运算符必须定义为转义管\|
(类似于(
和)
):
echo "AB345678" | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}\|[0-9]\{8\}\)$/p'
^^
查看online demo。
答案 1 :(得分:0)
在更复杂的表达式中,您可以将' -r' 添加到sed选项,而不是转义敏感字符。
从sed手册:
-r, - regexp-extended
在脚本中使用扩展的正则表达式。
答案:
echo AB345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p'
^
echo 12345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p'
^