我有一个日志文件,其内容如下:
#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。它当然更具可读性。