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/'

あなたの場合、1つのコマンドは拡張正規表現(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

注: ERE を選択するために-rを に変更しました-E。これは、 のより多くのバージョンで認識されるためですsed

答え2

2 つのコマンドの組み合わせのより近いバリエーションは次のようになると思います (POSIX 的):

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

しかし、より正確な結果を得るには入力例が必要です。

関連情報