
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 sed
comandos como vários s
comandos 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 -r
para -E
selecionar 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.