Awk正则编译失败(缺少操作数):gawk与mawk语法差异排查
更新1
问题根源在于本地使用gawk,而工具项目中使用mawk。正如Fravadona指出、Ed Morton解释的那样,gawk不会报错是因为它会静默忽略我在正则表达式中犯的错误。
问题描述
我希望将某命令的输出通过管道传递给awk,过滤出Base64编码值并进行掩码处理。当前代码逻辑为:若行中存在Base64编码值,则对整行进行掩码。
管道后的awk命令如下:
#!/usr/bin/env bash [...] <some command that outputs a lot to cli> | awk '{ if (/(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{4}|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{2}={2})$/) print "[MASKED]" else print }'
但我遇到如下错误:
awk: line 2: regular expression compile failed (missing operand) (?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}={2})$
背景说明(解释我的困惑):
- 上述代码位于一个工具项目中,供所有其他项目使用
- 工具项目的代码写在Bash脚本内
- 逻辑本身是可行的,因为若将工具项目Bash脚本中的正则改为诸如
'匹配的单词'这类内容,则不会报错 - 我已通过regex101检查正则语法的括号匹配情况,确认无缺失
若在单个项目的justfile中重构该命令,则可正常运行(示例如下):
debug: #!/usr/bin/env bash <some command that outputs a lot to cli> \ | awk '{ if (/(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{4}|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{2}={2})$/) print "[MASKED]" else print }'
因此我认为自己忽略了某个明显的点,提前感谢各位的帮助!
内容的提问来源于stack exchange,提问作者Shushiro
相关产品推荐
相关产品推荐

