Sed替换字符串中的字符

时间:2012-10-18 21:38:02

标签: linux replace sed find vi

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

如何更换字符串?

3 个答案:

答案 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

您需要.*来匹配任何字符的零个或多个出现。而且,我没有使用花括号;我不确定他们是否需要逃脱。