如何在 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
选择-E
ERE,因为更多版本的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
但我需要输入示例才能获得更准确的结果。