【发布时间】:2016-12-25 09:53:55
【问题描述】:
如果我这样做
# perl -lne "print \$1 if /'?(\d{5})'?:/" courses.yaml
00000
01005
然后我得到了我想要的结果,但现在我想用grep 来代替。
为什么以下内容不能得到相同的输出?
# grep -oP "\'?(\d{5})\'?:" courses.yaml
'00000':
'01005':
【问题讨论】:
-
因为它返回与正则表达式匹配的所有内容。您可能想要使用
\K或一些前瞻/后视。 -
您在第一种情况下打印第 1 组的内容,在第二种情况下打印整个匹配项。试试
grep -oP "(\d{5})(?='?:)" courses.yaml -
This answer 提供了有关使用前瞻/后瞻断言以使
-o按您希望的方式工作的更多详细信息。 -
为什么不坚持
perl?或者更好的是,使用YAML解析器,并且一开始就不要对其进行正则表达式?
标签: regex linux bash perl grep