1

我有一个带字符串的文件(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

如何替换字符串?

4

3 回答 3

1

Sed 使用了一些不寻常的转义风格:您(通常)转义符号以使它们“活跃”,否则它们只是字符。

所以,这个工作正常(没有转义大括号,另外,你错过了一个点)

sed 's/{"var": \[.*\]\}/\{"var": \[4,5,6\]}/g' file.txt

但是,我建议您不要这样做,即。使用适当的 json 解析器打开文件,更改它,然后再次保存。

于 2012-10-18T21:43:39.570 回答
0

试试这个 :

sed -r 's@(\{"var": \[)[^\]+\]@\14,5,6]}@' file.txt

输出

{"var": [4,5,6]}}
  • { }&[ ]需要反斜杠,因为它是sed正则表达式中的一些关键字
  • 表示扩展正-r表达式,这需要更少的反斜杠。
于 2012-10-18T21:42:46.933 回答
0

看一下这个:

echo '{"var": [1,2,3]}' | sed 's/{"var": \[.*\]}/\{"var": \[4,5,6\]\}/g

您需要.*匹配零次或多次出现的任何字符。另外,我没有转义花括号;我不确定他们是否需要逃脱。

于 2012-10-18T21:43:29.140 回答