2016-07-23 84 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

謝謝你的解釋。這完全清除它! –