combinar dois comandos sed

combinar dois comandos sed

como combinar os comandos sed abaixo no Linux

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

e

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

Obrigado

Responder1

Normalmente, você pode simplesmente concatenar sedcomandos como vários scomandos com ponto e vírgula incorporado:

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

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

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

ou com ERE:

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

Observação: mudei -rpara -Eselecionar ERE, porque isso é entendido por mais versões do sed.

Responder2

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

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

Ou mais simples:

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

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

informação relacionada