Excluindo um padrão de um arquivo e anexando-o ao final?

Excluindo um padrão de um arquivo e anexando-o ao final?

Eu tenho um arquivo de log com conteúdo como abaixo:

 #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 

Quero excluir todas essas linhas do arquivo e anexá-las ao final do arquivo de forma que fique assim:

#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#

Estou pensando em usar sed -n '/These*/{n;p}'mas ainda não consegui o resultado.

NOTA: MAIS ALGUNS DADOS significa mais conteúdo no arquivo e esses tipos de linhas podem estar em qualquer lugar do arquivo

These switches don't have latest images :
SWEs-elmPCI-B-01#

Responder1

sed -ne '/^These/{n;w tempfile
d;};p' < oldfile > newfile
echo "These switches don't have latest images :" >> newfile
cat tempfile >> newfile

Pode-se usar o espaço de espera em vez de um arquivo temporário:

sed -ne '/^These/{n;H;d;};p;${x;s/^/These switches don'"'"'t have latest images :/;p;}' < oldfile > newfile

No entanto, isso falhará se o arquivo terminar com um dos blocos "Essas opções", em vez de "ALGUNS MAIS DADOS". A razão é que o último comando ${x;....p;}é executado somente se a última linha não tiver sido excluída antes por um dcomando. Se você quiser evitar arquivos temporários, provavelmente é melhor usar perl ou python. Certamente é mais legível.

informação relacionada