объединить две команды sed

объединить две команды sed

как объединить приведенные ниже команды sed в Linux

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

В вашем случае одна команда используетрасширенные регулярные выражения(ЭРЭ), другойосновные регулярные выражения, поэтому вам нужно преобразовать одно или другое:

sed -n 's/.*MsgFlow="\([^"]*\)".*/\1/p;s:.*<ProcessDtm>\(.*\)</ProcessDtm>.*:\1:p' ADVQCC_OUTPUT_BRK1

или с ЭРЭ:

sed -En 's/.*MsgFlow="([^"]*)".*/\1/p;s:.*<ProcessDtm>(.*)</ProcessDtm>.*:\1:p' ADVQCC_OUTPUT_BRK1

Примечание: Я изменил -rна -Eдля выбора ERE, потому что это понимают больше версий 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

Но мне нужен пример входных данных, чтобы получить более точный результат.

Связанный контент