combinar dos comandos sed

combinar dos comandos sed

cómo combinar los siguientes comandos sed en Linux

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

y

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

Gracias

Respuesta1

Por lo general, puedes simplemente concatenar sedcomandos como varios scomandos con un punto y coma incrustado:

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

En su caso, un comando usaexpresiones regulares extendidas(ERE), el otroexpresiones regulares básicas, entonces necesitas convertir uno u otro:

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

o con ERE:

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

Observación: Cambié -ra -Eseleccionar ERE, porque esto lo entienden más versiones de sed.

Respuesta2

Creo que la variante más cercana de la combinación de dos comandos será (POSIXly):

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

O más simplemente:

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

Pero necesito un ejemplo de entrada para obtener un resultado más exacto.

información relacionada