使用awk匹配行首首个模式时添加^锚点匹配失败是什么原因
问题根因
你匹配失败的核心原因是正则表达式中的?没有转义:
?在正则中是特殊量词,默认代表「匹配前一个字符0次或1次」,你需要匹配<?xml里的字面?时,必须转义为\?。- 不加
^时能匹配属于GNU awk的非标准兼容行为:当?无法被识别为有效量词时,会被临时当作字面量处理,这种行为是不可靠的,换版本、换正则模式、加行首锚点都可能触发失效。
解决方法
把正则里的?转义即可,修改后的命令如下:
echo -e "<?xml version=\"1.1\" encoding=\"UTF-8\" standalone=\"no\"?>\n<databaseChangeLog" | awk -e'/^[[:space:]]*<\?xml /{ print "match"; } { quit 0; }'
运行后会正常输出match。
内容的提问来源于stack exchange,提问作者will
相关产品推荐
相关产品推荐

