組合兩個 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

但我需要輸入範例才能獲得更準確的結果。

相關內容