從文件中刪除模式並將其附加到末尾?

從文件中刪除模式並將其附加到末尾?

我有一個日誌文件,其內容如下:

 #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。它當然更具可讀性。

相關內容