Shell 使用awk匹配列中字符串的长度

Shell 使用awk匹配列中字符串的长度,shell,awk,Shell,Awk,我试图提取与日期模式匹配的列,如:YYYY-MM-DD,但不理解以下命令之间的区别 工作指令 echo 1,2,3,4,2015-12-34 | awk -F, '{if($5~/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/) print $1}' echo 1,2,3,4,2015-12-34 | awk -F, '{if($5~/^[0-9]{d}-[0-9]{2}-[0-9]{2}$/)print $1}' 无效命令 echo 1,2,3,

我试图提取与日期模式匹配的列,如:
YYYY-MM-DD
,但不理解以下命令之间的区别

工作指令

echo 1,2,3,4,2015-12-34 | awk -F, '{if($5~/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/) print $1}'
echo 1,2,3,4,2015-12-34 | awk -F, '{if($5~/^[0-9]{d}-[0-9]{2}-[0-9]{2}$/)print $1}'
无效命令

echo 1,2,3,4,2015-12-34 | awk -F, '{if($5~/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/) print $1}'
echo 1,2,3,4,2015-12-34 | awk -F, '{if($5~/^[0-9]{d}-[0-9]{2}-[0-9]{2}$/)print $1}'

有人能解释一下为什么会发生这种情况吗?我是否遗漏了一个颗粒物?

您可以尝试以下内容,并让我知道这是否对您有帮助

echo 1,2,3,4,2015-12-34 | awk --re-interval -F, '{if($5~/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/)print $1}'


注意:我的
awk
版本很旧,因此我正在使用
--re interval
如果您有最新的
awk
版本,您可以将其删除。

ahhh。。似乎我的
awk
版本也旧了,我没有检查。矿山
Awk 3.1.7
。它也在我的身上工作。谢谢@Ravindernbd但是
/[0-9]{4}-[0-9]{2}-[0-9]{2}/
=
/[0-9]{4}-[0-9]{2}/