【问题标题】:How to replace single quotes to double quotes in bash?如何在bash中将单引号替换为双引号?
【发布时间】:2017-06-19 11:04:23
【问题描述】:

我有以下字符串:

 {"name":"ram","details":[{'subjects':{'service_location':'c:/A.exe','url':'http://A.zip'}}]}

在上面的字符串中,很少有字符串有单引号。那么,如何将上述字符串中的单引号替换为双引号,得到如下结果:

 {"name":"ram","details":[{"subjects":{"service_location":"c:/A.exe","url":"http://A.zip"}}]}

【问题讨论】:

  • 旁边的问题是,为什么你要这样做?您是否应该以编程方式修复JSON?并且您正在寻找一种使用文本处理器工具的快速脏方法?
  • 你必须假设字符串中没有一个单引号是值的部分,例如{"name": "Jake 'The Snake' Jones", "name": 'Bob' };否则,您通常无法分辨(没有更复杂的解析器)要替换哪些单引号。

标签: bash ubuntu sed


【解决方案1】:

以下会将所有单引号转换为双引号。这使用了awk 的内置gsub 函数来搜索和替换文本。在这里,我们告诉 awk 替换等于单引号的 s。找到单引号后,将其替换为双引号。 1是打印行。

awk -v s="'" '{gsub(s,"\"")}1' file

source-of-json | awk -v s="'" '{gsub(s,"\"")}1'

【讨论】:

  • 您能否详细说明一下我将如何在上面的上下文中使用并回显生成的字符串
【解决方案2】:

@Learner:尝试sed 解决方案:

sed "s/'/\"/g"  Input_file

your_command | sed "s/'/\"/g" 

【讨论】:

    【解决方案3】:

    扩展@RavinderSingh13 答案,使用以下命令转换您的字符串。

    echo '{"name":"ram","details":'"[{'subjects':{'service_location':'c:/A.exe','url':'http://A.zip'}}]}" | sed "s/'/\"/g"
    

    【讨论】:

      【解决方案4】:

      tr翻译单个字符:

      your_command | tr "'" '"'
      

      或者,如果输入太多:

      your_command | tr \' \"
      

      :-)

      【讨论】:

      • 用你用来生成数据的命令代替your_command,或者如果你在变量中使用tr \' \" <<< "$your_variable"
      猜你喜欢
      • 2020-12-28
      • 2018-11-18
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多