
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
しかし、より正確な結果を得るには入力例が必要です。