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
d
comando. Se você quiser evitar arquivos temporários, provavelmente é melhor usar perl ou python. Certamente é mais legível.