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
두 명령을 결합한 것의 더 가까운 변형은 (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
하지만 더 정확한 결과를 얻으려면 예시를 입력해야 합니다.