combina dois comandos sed

0

como combinar os comandos abaixo do sed no Linux

sed -rn 's/.*MsgFlow="([^"]*)".*//p'  ADVQCC_OUTPUT_BRK1

e

sed -n 's:.*<ProcessDtm>\(.*\)</ProcessDtm>.*::p' ADVQCC_OUTPUT_BRK1

Obrigado

    
por user263562 30.11.2017 / 11:01

2 respostas

0

Acho que a variante mais próxima da combinação de dois comandos será (POSIXly):

sed -ne 's/.*MsgFlow=\"\([^"]*\)\".*//p' -ne 's/.*<ProcessDtm>\\(.*\\)<\/ProcessDtm>.*//p' ADVQCC_OUTPUT_BRK1

Ou mais simples:

sed -e 's/.*MsgFlow=\"\([^"]*\)\".*//' -e 's/.*<ProcessDtm>\\(.*\\)<\/ProcessDtm>.*//' ADVQCC_OUTPUT_BRK1

Mas eu preciso de um exemplo de entrada para obter um resultado mais exato.

    
por 30.11.2017 / 11:20
0

Normalmente, você pode simplesmente concatenar comandos sed como vários comandos s com um ponto-e-vírgula incorporado:

sed 's/some/another/;s/stuff/thing/'

No seu caso, um comando usa expressões regulares estendidas (ERE), as outras expressões regulares básicas , então você precisa converter um ou outro:

sed -n 's/.*MsgFlow="\([^"]*\)".*//p;s:.*<ProcessDtm>\(.*\)</ProcessDtm>.*::p' ADVQCC_OUTPUT_BRK1

ou com ERE:

sed -En 's/.*MsgFlow="([^"]*)".*//p;s:.*<ProcessDtm>(.*)</ProcessDtm>.*::p' ADVQCC_OUTPUT_BRK1

Observação: eu mudei -r para -E para selecionar ERE, porque isso é entendido por mais versões de sed .

    
por 30.11.2017 / 12:26

Tags