【问题标题】:How do I replace single quotes with another character in sed?如何在 sed 中用另一个字符替换单引号?
【发布时间】:2013-06-28 05:42:54
【问题描述】:

我有一个平面文件,其中多次出现包含单引号的字符串,例如hari'sleader's

我想用空格替换所有出现的单引号,即

  • hari'shari s 的所有出现
  • leader'sleader s 的所有出现

我试过了

sed -e 's/"'"/ /g' myfile.txt

sed -e 's/"'"/" "/g' myfile.txt

但他们没有给我预期的结果。

【问题讨论】:

    标签: linux bash shell unix


    【解决方案1】:

    尽量保持 sed 命令简单。 否则你会在稍后阅读它时对你写的内容感到困惑。

    #!/bin/bash
    sed "s/'/ /g" myfile.txt
    

    【讨论】:

      【解决方案2】:

      这会做你想做的事

      echo "hari's"| sed 's/\x27/ /g'
      

      它将替换文件/文本中任何位置的单引号。即使它们用于引用,它们也将被替换为空格。在这种情况下(删除不在单词边界的单词中的引号)您可以使用以下内容:

      echo "hari's"| sed -re 's/(\<.+)\x27(.+\>)/\1 \2/g'
      

      HTH

      【讨论】:

        【解决方案3】:

        离开单引号并放一个转义的单引号:

        sed 's/'\''/ /g' input
        

        也可以使用变量:

        quote=\'
        sed "s/$quote/ /g" input
        

        【讨论】:

          【解决方案4】:

          这里是根据我自己的经验。

          请注意我在sed 之后如何使用特殊字符'"

          这不行(没有输出)

          2521 #> echo 1'2'3'4'5 | sed 's/'/ /g'
          >
          >
          >
          

          但是这样可以

          2520 #> echo 1'2'3'4'5 | sed "s/'/ /g"
          12345
          

          【讨论】:

          • 我想稍微解释一下会很好。另外:这真的是 Solaris 问题还是其他问题? (还有什么?)
          【解决方案5】:

          -i 应该在文件中替换它 sed -i 's/“/”/g' 文件名.txt

          如果你想要备份,你可以做 sed -i.bak 's/“/”/g' 文件名.txt

          【讨论】:

            【解决方案6】:

            我不得不用“32'h”替换“0x”字符串并解决:

            sed 's/ 0x/ 32\x27h/'
            

            【讨论】:

              猜你喜欢
              • 2019-06-01
              • 1970-01-01
              • 2020-03-27
              • 2018-12-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-04
              相关资源
              最近更新 更多