正则表达式与txt文件中的行不匹配

时间:2015-02-10 07:23:50

标签: regex bash

我正在阅读文本文件中的行,并检查它是否与我创建的正则表达式匹配。

但是它总是说你的正则表达式并不匹配,但正则表达式工具表明它与我的常规解释相符。

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

2 个答案:

答案 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属性。没有必要逃避连字符。