【问题标题】:unix commandline for inline replacement of all newlines in file with <br>\n用于内联替换文件中所有换行符的 unix 命令行 <br>\n
【发布时间】:2011-03-30 18:04:43
【问题描述】:
sed 's/$/<br>/' mytext.txt

工作,但在命令行上全部输出。我希望它只在指定文件本身内进行替换。我应该使用其他工具吗?

【问题讨论】:

    标签: bash unix command-line sed


    【解决方案1】:

    使用重定向符号,即

    sed 's/$/<br>/' mytext.txt > mytext2.txt && mv mytext2.txt mytext.txt
    

    【讨论】:

      【解决方案2】:

      如果你有 gnu sed,你可以使用-i 选项,它会就地替换。

      sed -i 's/$/<br>/' mytext.txt
      

      否则您将不得不重定向到另一个文件并将其重命名为旧文件。

      sed 's/$/<br>/' mytext.txt > mytext.txt.new && mv mytext.txt.new mytext.txt
      

      【讨论】:

        【解决方案3】:

        如果您有最新的sed,只需使用sed -ised --in-place,这将修改实际文件本身。

        如果您需要备份,则需要为其提供后缀。所以sed -i.baksed --in-place=.bak 将创建一个带有.bak 后缀的备份文件。

        使用这个!严重地!当您因为输入错误的sed 命令或对文件中数据的错误假设而第一次损坏文件时,您会非常感激。

        【讨论】:

        • 这实际上是一个新的启示。我完全没有意识到这一点。感谢您对 paxdiablo 的洞察!
        【解决方案4】:

        只是为了完整性。在 Mac OS X(使用 FreeBSD sed)上,您必须使用额外的空字符串 "" 进行就地文件编辑而无需备份:

        sed -i "" 's/$/<br>/' mytext.txt
        

        作为使用 sed 进行无备份就地文件编辑的替代方法,您可以使用 ed(1),但它会在对文件进行操作之前将整个文件读入内存。

        printf '%s\n' H 'g/$/s//<br>/g' ',p' | ed -s test.file  # print to stdout
        
        printf '%s\n' H 'g/$/s//<br>/g' wq | ed -s test.file  # in-place file edit
        

        有关 ed(1) 的更多信息,请参阅:

        "使用 ed 文本编辑器从脚本编辑文件",

        http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-03
          • 1970-01-01
          • 2015-09-15
          • 1970-01-01
          • 2020-12-09
          • 2014-03-28
          • 2011-08-22
          相关资源
          最近更新 更多