我有一个带字符串的文件(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
如何替换字符串?
Sed 使用了一些不寻常的转义风格:您(通常)转义符号以使它们“活跃”,否则它们只是字符。
所以,这个工作正常(没有转义大括号,另外,你错过了一个点)
sed 's/{"var": \[.*\]\}/\{"var": \[4,5,6\]}/g' file.txt
但是,我建议您不要这样做,即。使用适当的 json 解析器打开文件,更改它,然后再次保存。
试试这个 :
sed -r 's@(\{"var": \[)[^\]+\]@\14,5,6]}@' file.txt
输出
{"var": [4,5,6]}}
{ }
&[ ]
需要反斜杠,因为它是sed
正则表达式中的一些关键字-r
则表达式,这需要更少的反斜杠。看一下这个:
echo '{"var": [1,2,3]}' | sed 's/{"var": \[.*\]}/\{"var": \[4,5,6\]\}/g
您需要.*
匹配零次或多次出现的任何字符。另外,我没有转义花括号;我不确定他们是否需要逃脱。