我正在阅读文本文件中的行,并检查它是否与我创建的正则表达式匹配。
但是它总是说你的正则表达式并不匹配,但正则表达式工具表明它与我的常规解释相符。
while read line
do
name=$line
BRANCH_REGEX="\d{10}\-[^_]*\_\d{13}"
if [[ $name =~ $BRANCH_REGEX ]];
then
echo "BRANCH '$name' matches BRANCH_REGEX '$BRANCH_REGEX'"
else
echo "BRANCH '$name' DOES NOT MATCH BRANCH_REGEX '$BRANCH_REGEX'"
fi
done < names.txt
names.txt包含行,例如:
9000999484-suchocka_1416578464908
9000989944-schubertk_1416582641605
9001026342-extbeerfelde_1416586904787
9000687045-sturmjo_1416573131629
9001059401-extburghartswieser_1416405627982
9000806302-PDPUPDATE_1357830207068
9000658783-PDPUPDATE_1360445087963
答案 0 :(得分:2)
BRANCH_REGEX="/\d{10}\-[^_]*\_\d{13}"
↑
删除前导/
,您的所有行都不会以它开头。
另请注意,_
不需要转义,您可以写_
代替\_
。
答案 1 :(得分:1)
将正则表达式更改为:
BRANCH_REGEX="[0-9]{10}-[^_]*_[0-9]{13}"
否则:
BRANCH_REGEX="[[:digit:]]{10}-[^_]*_[[:digit:]]{13}"
由于 BASH正则表达式不支持\d
属性。没有必要逃避连字符。