obter parte do valor de uma palavra específica no AIX

obter parte do valor de uma palavra específica no AIX

quero pesquisar string e preciso de parte da string

arquivo.txt:

CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKADSRATIO

ao usar sedo comando abaixo obtendo valor extra

Saída:

bash-4.3$ sed -n 's/.*$$ENV$$_//p' file.txt

**TEMP_ESM.EMPASGMTAMPTMPRTRSE** ,NO FALLBACK ,

Eu preciso apenasTEMP_ESM.EMPASGMTAMPTMPRTRSE

Responder1

sed -n 's/.*$$ENV$$_//p' example.txt

O comando s/pattern/replacement/de sedpesquisa em todas as linhas a ocorrência da expressão regular patterne a substitui. Com a substituição vazia, o padrão é excluído, o que parece ser o que você deseja.

O final pgera a linha modificada, enquanto toda a saída padrão é suprimida pela -nopção.

Responder2

Com GNU grepquando construído com suporte PCRE (recente) (como é comum em sistemas GNU e BSD):

grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file

extrairia todas as sequências de caracteres, exceto espaços em branco e vírgula, que seguem cada ocorrência de $$ENV$$_.

Se o GNU grepnão estiver disponível, o mesmo pode ser feito com perl(o Pno PCRE):

perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file

Ou se a perlversão for muito antiga para suportar \K:

perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file

Responder3

sedabordagem:

sed -n 's/^CREATE.*$_\([^[:space:],]*\).*/\1/p' file
  • \([^[:space:],]*\)- o primeiro grupo capturado contendo caracteres, exceto espaços em branco [:space:]e vírgula,

A saída:

TEMP_ESM.EMPASGMTAMPTMPRTRSE

Responder4

sed '/.*$$ENV$$_/!d;s///;s/,.*//'
  • /.*$$ENV$$_/!d: Se a linha não contiver $$ENV$$_, nenhuma saída, nenhum processamento adicional
  • s///: remova o padrão correspondente
  • s/,.*//: remova a vírgula e tudo depois

informação relacionada