【问题标题】:Sed replace characters in a stringsed 替换字符串中的字符
【发布时间】:2012-10-09 11:20:03
【问题描述】:

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

如何替换字符串?

【问题讨论】:

    标签: linux replace sed find vi


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      看看这个:

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

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

        输出

        {"var": [4,5,6]}}
        
        • { } & [ ] 需要反斜杠,因为 sed 正则表达式中有一些关键字
        • -r 表示扩展正则表达式,这需要较少的反斜杠。

        【讨论】:

        • 编辑文件,回显字符串没有帮助
        • 这只是删除 {"var": [1,2,3]} 字符串
        • 可能......我之前尝试过来自互联网的例子,他们会给我与海报不同的输出
        猜你喜欢
        • 2020-03-13
        • 1970-01-01
        • 2020-07-28
        • 2015-01-13
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多