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
sed
答え2
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
ただし、より正確な結果を得るには、例を入力する必要があります。