我有一個日誌文件,其內容如下:
#SOME MORE DATA
These switches don't have latest images :
SWEs-elmPCI-A-01#
#SOME MORE DATA
These switches don't have latest images :
SWEs-elmPCI-B-01#
#SOME MORE DATA
These switches don't have latest images :
SWEs-elmPCI-C-01#
#SOME MORE DATA
These switches don't have latest images :
SWEs-elmPCI-D-01#
#SOME MORE DATA
These switches don't have latest images :
SWEs-elmPCI-B-01#
#SOME MORE DATA
我想從文件中刪除所有此類行並將其附加到文件末尾,使其變為:
#ALL the remaining data at top
These switches don't have latest images :
SWEs-elmPCI-A-01#
SWEs-elmPCI-B-01#
SWEs-elmPCI-C-01#
SWEs-elmPCI-D-01#
SWEs-elmPCI-B-01#
我正在考慮使用sed -n '/These*/{n;p}'
但仍然無法達到結果。
注意:更多資料意味著文件中的內容更多,這些類型的行可以位於文件中的任何位置
These switches don't have latest images :
SWEs-elmPCI-B-01#
答案1
sed -ne '/^These/{n;w tempfile
d;};p' < oldfile > newfile
echo "These switches don't have latest images :" >> newfile
cat tempfile >> newfile
人們可以使用保留空間而不是臨時檔案:
sed -ne '/^These/{n;H;d;};p;${x;s/^/These switches don'"'"'t have latest images :/;p;}' < oldfile > newfile
但是,如果檔案以「這些開關」區塊之一結束,而不是以「更多資料」結束,則此操作將會失敗。原因是${x;....p;}
只有當指令之前沒有刪除最後一行才會執行 最後一個指令d
。如果您想避免臨時文件,最好使用 perl 或 python。它當然更具可讀性。