【发布时间】:2011-03-30 18:04:43
【问题描述】:
sed 's/$/<br>/' mytext.txt
工作,但在命令行上全部输出。我希望它只在指定文件本身内进行替换。我应该使用其他工具吗?
【问题讨论】:
标签: bash unix command-line sed
sed 's/$/<br>/' mytext.txt
工作,但在命令行上全部输出。我希望它只在指定文件本身内进行替换。我应该使用其他工具吗?
【问题讨论】:
标签: bash unix command-line sed
使用重定向符号,即
sed 's/$/<br>/' mytext.txt > mytext2.txt && mv mytext2.txt mytext.txt
【讨论】:
如果你有 gnu sed,你可以使用-i 选项,它会就地替换。
sed -i 's/$/<br>/' mytext.txt
否则您将不得不重定向到另一个文件并将其重命名为旧文件。
sed 's/$/<br>/' mytext.txt > mytext.txt.new && mv mytext.txt.new mytext.txt
【讨论】:
如果您有最新的sed,只需使用sed -i 或sed --in-place,这将修改实际文件本身。
如果您需要备份,则需要为其提供后缀。所以sed -i.bak 或sed --in-place=.bak 将创建一个带有.bak 后缀的备份文件。
使用这个!严重地!当您因为输入错误的sed 命令或对文件中数据的错误假设而第一次损坏文件时,您会非常感激。
【讨论】:
只是为了完整性。在 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 文本编辑器从脚本编辑文件",
【讨论】: