从文件中删除模式并将其附加到末尾?

从文件中删除模式并将其附加到末尾?

我有一个日志文件,其内容如下:

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

相关内容