以下のような内容のログ ファイルがあります。
#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
ただし、ファイルが「SOME MORE DATA」ではなく「These switches」ブロックのいずれかで終了している場合は失敗します。これは、最後の${x;....p;}
行がコマンドによって以前に削除されていない場合にのみ最後のコマンドが実行される ためですd
。一時ファイルを避けたい場合は、perl または python を使用する方がよいでしょう。その方が確実に読みやすくなります。