我在CentOS上有一個很長的,維護得不好的bash腳本,其中有很多使用echo的日誌行,並且其中有三分之一左右是登錄日誌文件。我想修改其餘的回聲線,以便將這些日誌文件發送到此日誌文件中。添加到缺少模式的行的末尾
下面是一個例子myscript.sh:
command1
echo "hi1"
echo "hi2" | tee -a my.log
echo "hi3 tee"
command2
該文件運行後的東西,我想的內容改爲:
command1
echo "hi1" | tee -a my.log
echo "hi2" | tee -a my.log
echo "hi3 tee" | tee -a my.log
command2
我在想,我需要使用帶正則表達式的sed或awk,其邏輯是「如果行包含'echo
',然後是而不是'| tee
',然後在該行的末尾附加'| tee -a my.log
'」。
很多搜索後,這是我想出來的迄今最好的:
sed --in-place=_BACKUP '/^.*echo\(?!\| tee$\)*/ s/$/ \| tee -a my.log/' myscript.sh
但這只是附加| tee -a my.log
包含echo
每一行的末尾。
有沒有人有任何好點子?