2つのsedコマンドの組み合わせ

2つの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-Esed

答え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

ただし、より正確な結果を得るには、例を入力する必要があります。

関連情報