0
我想解析一个字幕文件。和样本串的样子:Bash正则表达式匹配冒号分隔的整数
00:00:01000 - > 00:00:04074
我有这样的正则表达式:
#!/bin/bash
while read line
do
if [[ "$line" =~ ^[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}* ]]
then
echo $line
fi
done < $1
此正则表达式的作品并回线。但是,当我将if语句中的模式扩展为:
if [[ "$line" =~ ^[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}*--* ]]
那么它就不能工作了。
同样,这个正则表达式的工作原理:
while read line
do
if [[ "$line" =~ [0-9]{2}*[0-9]{2}*[0-9]{2}*[0-9]{3}*--\>*[0-9]{2}*[0-9]{2}*[0-9]{2}*[0-9]{3}* ]]
then
echo $line
fi
done < $1
但是,如果我把^
在模式的开始(如在第一种情况下),或者如果我使用:
S和,
的IT没有按”再工作。
我不明白为什么会出现这种奇怪的行为。谁能帮忙?
谢谢!你能告诉我为什么在最后? – gaganbm 2012-07-14 23:39:37
在开始时'^'的意思是“只在字符串的开头匹配”,'$'只匹配字符串的末尾。所以,如果你同时使用它们,那么你的正则表达式必须匹配整个字符串。 – Trott 2012-07-14 23:40:35
谢谢。为我工作。 :-) – gaganbm 2012-07-14 23:42:05