
如何在 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
但我需要輸入範例才能獲得更準確的結果。