提问人:jjk 提问时间:7/5/2023 最后编辑:Cyrusjjk 更新时间:7/5/2023 访问量:65
sed 命令返回有关 Unmatched (
sed command returns error about Unmatched (
问:
我需要去掉方括号,我只需要一次。但是,在此命令之后,我收到以下错误:
sed -ri 's/("opening_hours": \[\[)(.*?)(\]\]/"opening_hours": \[\2\]/' ./foo.txt
错误:sed:-e 表达式 #1,字符 60:不匹配( 或 (
输入(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"]
答:
2赞
Cyrus
7/5/2023
#1
为了更清楚起见,我建议使用两个命令:s
sed 's/\[//; s/]//' foo.txt
2赞
RavinderSingh13
7/5/2023
#2
为了将确切的括号与您显示的示例相匹配,我建议使用以下内容。我使用 2 个替换项,但正则表达式是为了匹配更准确的括号。
sed 's/": \[\["/": [":/; s/"\]\]$/"]/' Input_file
1赞
potong
7/5/2023
#3
这可能对你有用(GNU sed):
sed -E 's/\[([^][]*)\]/\1/' file
匹配 a,后跟 0 或 non,后跟 a,然后用 和 之间的值替换它。[
[
]
]
[
]
注意匹配项不是 a 或 .[^][]
[
]
评论
.*?
(\]\]