我有一个带字符串的文件(1,2,3会有所不同):
{"var": [1,2,3]}
我想将其替换为:
{"var": [4,5,6]}
我试试这个:
sed 's/\{"var": \[.*\]\}/\{"var": \[4,5,6\]\}/g' file.txt
但是我收到了一个错误:
Invalid preceding regular expression
如何更换字符串?
答案 0 :(得分:1)
Sed使用一些不寻常的转义样式:你(通常)转义符号使它们“活动”,否则它们只是字符。
所以,这一个正常工作(没有逃避括号,另外,你错过了一个点)
sed 's/{"var": \[.*\]\}/\{"var": \[4,5,6\]}/g' file.txt
然而,我建议你不要这样做,即。使用适当的json解析器打开文件,更改文件,然后重新保存。
答案 1 :(得分:0)
试试这个:
sed -r 's@(\{"var": \[)[^\]+\]@\14,5,6]}@' file.txt
<强>输出强>
{"var": [4,5,6]}}
{ }
&amp; [ ]
需要反斜杠,因为sed
regex -r
表示扩展正则表达式,这需要更少的反斜杠。答案 2 :(得分:0)
检查出来:
echo '{"var": [1,2,3]}' | sed 's/{"var": \[.*\]}/\{"var": \[4,5,6\]\}/g
您需要.*
来匹配任何字符的零个或多个出现。而且,我没有使用花括号;我不确定他们是否需要逃脱。