ファイルからパターンを削除して最後に追加しますか?

ファイルからパターンを削除して最後に追加しますか?

次の内容を含むログファイルがあります。

 #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

ただし、ファイルが「追加データ」の代わりにこれらのスイッチブロックの1つで終わると失敗します。これは、${x;....p;}コマンドの前に最後の行を削除しなかった場合にのみ最後のコマンドが実行されるためですd。一時ファイルを回避するには、PerlまたはPythonを使用することをお勧めします。確かにもっと読みやすいです。

おすすめ記事