regex sed命令返回关于Unmatched(

aydmsdu9  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(195)

我需要去掉两个方括号,我只需要它们一次。但是,在执行此命令后出现以下错误:

sed -ri 's/("opening_hours": \[\[)(.*?)(\]\]/"opening_hours": \[\2\]/' ./foo.txt

字符串
错误:sed:-e表达式#1,char 60:不匹配(或(
input(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"]

nr7wwzry

nr7wwzry1#

为了更清楚,我建议使用两个s命令:

sed 's/\[//; s/]//' foo.txt

字符串

ssgvzors

ssgvzors2#

为了与您所示的样品匹配确切的括号,我建议使用以下。这里我使用了2个替换,但正则表达式是为了匹配更精确的括号。

sed 's/": \[\["/": [":/; s/"\]\]$/"]/'  Input_file

字符串

1rhkuytd

1rhkuytd3#

这可能对你有用(GNU sed):

sed -E 's/\[([^][]*)\]/\1/' file

字符串
匹配[后跟零或非[]后跟],并将其替换为[]之间的值。
注意:[^][]不匹配[]

相关问题