【问题标题】:UNIX Sed Command to Replace double quote " with 2 single quote ''用 2 个单引号 '' 替换双引号的 UNIX Sed 命令
【发布时间】:2016-03-10 06:16:49
【问题描述】:

我的文件有这样的记录

 Nitin "Nick" Patel

我想用两个单引号代替双引号:

 Nitin ''Nick'' Patel

我试过命令

sed -i "s/\Nitin "Nick" Patel/Nitin ''Nick''Patel/g" test1.csv

但不幸的是,它并没有取代任何东西。 请指教。

【问题讨论】:

    标签: shell unix sed tr


    【解决方案1】:
    sed "s/\"/''/g" File
    Nitin ''Nick'' Patel
    

    或者(根据具体要求,前一个将用 2 个' 替换所有"):

    sed "s/Nitin \"Nick\" Patel/Nitin ''Nick'' Patel/g" File
    Nitin ''Nick'' Patel
    

    【讨论】:

      【解决方案2】:

      在命令行中混合使用单引号和双引号需要小心。这可能就是你被要求这样做的原因。使用你的命令行:

      sed -i "s/\Nitin "Nick" Patel/Nitin ''Nick''Patel/g" test1.csv
      

      shell 实际上删除了嵌入的双引号(实际上sed 没有看到任何双引号)——就好像你写的那样:

      sed -i "s/\Nitin Nick Patel/Nitin ''Nick''Patel/g" test1.csv
      

      我也不确定你为什么在搜索字符串中 Nitin 的 N 之前加上反斜杠。

      有多种方法可以进行必要的替换,包括:

      sed -i.bak "s/Nitin \"Nick\" Patel/Nitin ''Nick'' Patel/g" test1.csv
      
      sed -i.bak 's/Nitin "Nick" Patel/Nitin '\'\''Nick'\'\'' Patel/g' test1.csv
      
      sed -i.bak -f script.sed test1.csv
      

      其中script.sed 包含:

      s/Nitin "Nick" Patel/Nitin ''Nick'' Patel/g
      

      【讨论】:

        【解决方案3】:

        大家可以试试:

        sed -i "s/\x22/\x27\x27/g" test1.csv
        

        【讨论】:

        • 是否需要\x27\x27 将一个双引号替换为两个单引号?它是否还编辑He said, "Don't!" 使其变为He said, 'Don't!'He said, ''Don't!'',而样本仅明确处理Nitin "Nick" Patel
        • @Jonathan 你是对的。这里 \x22 是一个双引号的十六进制代码, \x27 是一个单引号的十六进制代码
        猜你喜欢
        • 1970-01-01
        • 2022-01-27
        • 2016-08-10
        • 2011-06-19
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多