2016-07-23 70 views
2

我正在处理一个bash脚本并运行sed时出现问题,而我正在使用它清理空白文件。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 
} 

它的叶子输出文件完全空白

+0

以下是正确的。现在,在使用'set - $ @'时,总是使用dbl-quoting变量引用,即''$ reviewing“'(除了极少数高级案例),从shell脚本中消除另一类错误。良好的问答表达,继续发帖。祝你们好运。 – shellter

回答

1

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

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

您可以写入临时outfile并通过infile对其进行重命名或重命名文件(或打开in-file,然后删除它),然后写入预期位置。否则,你必须确保将所有内容都读入内存。

sed -i有和没有扩展功能的工作原理是一样的。例如参见https://robots.thoughtbot.com/sed-102-replace-in-place,其描述了-i变体。

+0

谢谢你的解释。这完全清除它! –