为什么以下文字字符串
1998-${year}
..匹配grep命令:
grep "[0-9 ]*-[ 0-9]*" filename.txt ?
我需要的是一个正则表达式,以匹配包含年份范围或仅包含年份值的以下任何字符串。
sdkfmslf 1998-2008
asdassdadsa 1998 - 2008
mkklml mklsmdf 2006
..但不是这一个:
asdsad a s 1998-${year}
答案 0 :(得分:0)
*
表示“匹配零或更多”。你想要+
,意思是“一个或多个。”
grep "[0-9 ]+-[0-9]+" filename.txt
答案 1 :(得分:0)
试试[0-9]{4}(\s*-\s*[0-9]{4})?
。这将匹配一个4位数字,或者如果它后面跟着(可选空格) - (可选空格),那么必须跟着另一个4位数字。
你的字符串" asdsad a s 1998 - $ {year}"仍然匹配,因为它有一个4位数值。
答案 2 :(得分:0)
我不喜欢回答我自己的问题,但以上都没有。这是我通过实验发现的。我相信可以有更优雅的解决方案,但这是一个有效的版本:
grep "[0-9][0-9][0-9][0-9][ ]*[\-]*[ ]*[0-9]*" filename.txt