Pegue a cadeia de dados do campo de saída na variável

0

Eu quero encontrar algumas linhas específicas de um arquivo de log e, em seguida, capturar uma parte específica dessa saída em uma variável e usá-la em outros comandos.

O comando grep que eu tenho é o seguinte, em que $ 1 é uma data:

grep -a --binary-file=text "pattern" /home/path/archive/logs/path.log-$1

Exemplo de saída:

/home/path/archive/logs/path.log-2015-04-13.0.gz:2015-05-13 00:43:49,779 INFO [DEUX-DR-SAMPLE-1] c.i.s.p.DeuxProxyPMMProcessor [DEUX : 361] SVRREQ|dataID|server request: (deliver: (pdu: 0 5 0 282190) (addr: 1 1 adress)  (addr: 1 1 mssidn)  (sm: enc: ASCII msg: id:dataID stat:pattern)

A partir dessa saída, quero pegar apenas o campo dataID e salvá-lo em uma variável para uso em outros comandos. No entanto, existem centenas de linhas como essa e o número de espaços não pode ser usado como um delimitador para obter o campo dataID porque varia de uma linha para outra.

    
por Asif 14.05.2015 / 12:40

1 resposta

1

Use grep com o PCRE:

$ var='/home/path/archive/logs/path.log-2015-04-13.0.gz:2015-05-13 00:43:49,779 INFO [DEUX-DR-SAMPLE-1] c.i.s.p.DeuxProxyPMMProcessor [DEUX : 361] SVRREQ|dataID|server request: (deliver: (pdu: 0 5 0 282190) (addr: 1 1 adress)  (addr: 1 1 mssidn)  (sm: enc: ASCII msg: id:dataID stat:pattern)'

$ grep -Po '.*?SVRREQ\|\K[^|]+(?=\|)' <<<"$var"
dataID

Para salvá-lo em uma variável:

$ foobar="$(grep -Po '.*?SVRREQ\|\K[^|]+(?=\|)' <<<"$var")"
    
por 14.05.2015 / 12:52