sed命令提示Unmatched (错误,如何去除opening_hours的双层括号?
问题解决:修复sed命令报错并实现方括号替换需求
报错原因
你执行的sed命令报错sed: -e expression #1, char 60: Unmatched ( or (,核心原因是正则表达式的分组括号不匹配:原命令中第三个分组只写了左括号(,却遗漏了对应的右括号),导致sed无法正确解析正则结构。另外,原命令使用的非贪婪匹配.*?在部分sed环境中可能存在兼容性问题。
解决方案
方案1:修正原正则的括号问题(适配GNU sed)
修正分组括号,并保留原替换逻辑,命令如下:
sed -ri 's/("opening_hours": \[\[)(.*?)(\]\])/\1\2\]/' ./foo.txt
方案2:简化替换逻辑(更通用、高效)
针对包含opening_hours字段的行,直接将开头的[[替换为[,结尾的]]替换为],无需复杂分组:
sed -ri '/"opening_hours"/ s/\[\[/\[/; s/\]\]/\]/' ./foo.txt
验证效果
输入内容
"opening_hours": [["Pendant les expositions : le jeudi de 12h \u00e0 20h et\u00a0du vendredi au dimanche, de 12h \u00e0 18h"]] "opening_hours": [["\u00d6ffnungszeiten: Fr-Sa, 15-7 Uhr und nach Vereinbarung", "Open hours: Fri-Sat, 3-7pm and by appointment"]]
执行命令后输出
"opening_hours": ["Pendant les expositions : le jeudi de 12h \u00e0 20h et\u00a0du vendredi au dimanche, de 12h \u00e0 18h"] "opening_hours": ["\u00d6ffnungszeiten: Fr-Sa, 15-7 Uhr und nach Vereinbarung", "Open hours: Fri-Sat, 3-7pm and by appointment"]
内容的提问来源于stack exchange,提问作者jjk
相关产品推荐
相关产品推荐

