
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
참고: ERE를 선택하기 위해 로 변경했습니다 -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
하지만 더 정확한 결과를 얻으려면 입력 예제가 필요합니다.