组合两个 sed 命令

组合两个 sed 命令

如何在 Linux 中组合以下 sed 命令

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

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

谢谢

答案1

通常,您可以简单地连接命令,例如使用嵌入的分号连接sed多个命令:s

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

在你的情况下,一个命令使用扩展正则表达式(ERE),另一个基本正则表达式,因此您需要转换其中之一:

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

或使用 ERE:

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

备注:我改为-r选择-EERE,因为更多版本的sed.

答案2

我认为两个命令组合的更接近的变体将是(POSIXly):

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

或者最简单的:

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

但我需要输入示例才能获得更准确的结果。

相关内容