플랫 파일 데이터베이스에서 특정 개체 삭제

플랫 파일 데이터베이스에서 특정 개체 삭제

특정 개체를 삭제해야 하는 플랫 파일 데이터베이스가 있습니다.

파일에 블록이 많은데, 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

관련 정보