Retire certos objetos de um banco de dados de arquivo simples

Retire certos objetos de um banco de dados de arquivo simples

Eu tenho um banco de dados de arquivo simples e preciso remover certos objetos dele.

Existem vários blocos no arquivo, mas estou interessado em 2 objetos no OBJECT NickCorebloco.

Exemplo abaixo:

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

Quero remover DATA displaytodos DATA passos OBJECT NickCoreblocos do arquivo.

A saída desejada seria separada apenas por vírgulas:

SomeUser,sha256:2b35341220119fad48762e4f843d1544354f8b196cf09bf1b4ea39f9a31be063:5ff60fae76026907102419460aae83aa74daf374048940b612ef83460043b565

O que devo usar para fazer isso?

Responder1

Com GNU sed:

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

Ver:man sed

Responder2

perl 1 linha:

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

informação relacionada