sed重写留下文件空白

时间:2016-07-23 01:45:03

标签: bash sed

我正在处理一个bash脚本并遇到sed的问题,我正在使用它清理空白文件。

以下是定义文件的块以及我为清理文件而创建的函数:

# Define Review Log file
reviewlog=/home/serverreview-$(date +%d%^b%y).txt
# Bleachs the Review Log of the color customization
bleach ()
{
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" $reviewlog >> $reviewlog
}

使用>>它确实将信息附加到文件的底部。但是,如果我使用:

bleach ()
{
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" $reviewlog > $reviewlog
}

它使输出文件完全空白

1 个答案:

答案 0 :(得分:1)

这是正常的,因为 sed 在写入时读取。第一次写入将截断文件。这结束了阅读并留下了一个空文件。

在某些情况下,当工具在写入之前读取缓冲区时,它将适用于小输入。但这不是你不想依赖的。因此,如果该工具没有就地覆盖选项,请不要使用它。

您可以写入临时文件并在infile上重命名或重命名文件内(或打开文件内,然后将其删除),然后写入预期位置。否则你必须确保将所有内容都读入内存。

带有和不带扩展名的

sed -i确实有效。例如,请参阅https://robots.thoughtbot.com/sed-102-replace-in-place,其中介绍了-i变体。