フラットファイルデータベースから特定のオブジェクトを削除する

フラットファイルデータベースから特定のオブジェクトを削除する

フラット ファイル データベースがあり、そこから特定のオブジェクトを削除する必要があります。

ファイルには多数のブロックがありますが、OBJECT NickCoreブロック内の 2 つのオブジェクトに興味があります。

以下に例を示します。

OBJECT NickCore
DATA display SomeUser
DATA pass sha256:2b35341220119fad48762e4f843d1544354f8b196cf09bf1b4ea39f9a31be063:5ff60fae76026907102419460aae83aa74daf374048940b612ef83460043b565
DATA email [email protected]
DATA language
DATA access SomeUsero@*.5A5E5CBA.81D21A52.IP
DATA memomax 20
DATA MEMO_SIGNON 1
DATA MEMO_RECEIVE 1
DATA HIDE_EMAIL 1
DATA HIDE_MASK 1
DATA NS_PRIVATE 1
DATA AUTOOP 1
DATA KILLPROTECT 1
DATA NS_SECURE 1
END

ファイル内のすべてのブロックからDATA displayと を削除したいと思います。DATA passOBJECT NickCore

望ましい出力は、カンマで区切られたものになります。

SomeUser,sha256:2b35341220119fad48762e4f843d1544354f8b196cf09bf1b4ea39f9a31be063:5ff60fae76026907102419460aae83aa74daf374048940b612ef83460043b565

これを実行するには何を使用すればよいですか?

答え1

GNU sed の場合:

sed -n '/^OBJECT NickCore/,/^END/{s/^DATA display //;Ta;h;:a;s/DATA pass //;Tb;H;g;s/\n/,/p;:b}' file

見る:man sed

答え2

perl 1ライナー:

perl -lne '$u=$1 if(/^DATA display (\S+)/);print "$u,$1" if(/^DATA pass (\S+)/)' filename

関連情報