sed를 사용하여 음수+양수 패턴이 발견되면 새 줄 삽입

sed를 사용하여 음수+양수 패턴이 발견되면 새 줄 삽입

적절하게 정리하고 구문 분석해야 하는 txt 파일이 많이 있습니다. "SP" 모드에 있을 때 래핑해야 합니다. 찾았으나 'ASSERT.SP' 모드에 없습니다. 찾을 수 있습니다.

샘플 콘텐츠:

    SP. 247 for specific issues no really solved
    ASSERT. SP. 4532 no so valuable it depends on primary conditions
    At first location in London City SP. 3901 must be applied
    ASSERT. SP. 23245 must be followed by procedure SP. 8236 in all steps
    Special tools are needed for SP. 9734 to be accomplished

원하는 결과:

        SP. 247 for specific issues no really solved
        ASSERT. SP. 4532 no so valuable it depends on primary conditions
        At first location in London City 
        SP. 3901 must be applied
        ASSERT. SP. 23245 must be followed by procedure 
        SP. 8236 in all steps
        Special tools are needed for 
        SP. 9734 to be accomplished

나의 첫 번째 접근 방식은정규식알아보세요"SP."아니요앞에 점을 추가하고 "개행 + SP"로 바꿉니다. 그러나 지금까지 성공하지 못했습니다.

sed -r 's/([^\.] )(SP\. )/\nSP\. /g' 

답변1

sedOP에 게시된 솔루션에 대한 일부 조정이 필요합니다.

sed -r 's/([^.] )(SP\. )/\1\n\2/g'

문제 s/([^\.] )(SP\. )/\nSP\. /g는 폐기 하는 부분은 물론 내부에서도 탈출할 필요가 없다는 점이다 ([^\.] )..[]

답변2

정지되지 않은 부품을 희귀한 기호로 교체한 다음 반환하면 동일한 작업이 해결되는 경우가 많습니다.

sed '
    s/\(^\s*\|ASSERT\. \)SP\./\1\a/g
    s/SP\./\n&/g
    s/\a/SP./g
    '

답변3

난 이걸 할거야

sed -r '
    # for lines without "ASSERT.", add a newline before "SP."
    # unless it is only preceded by whitespace
    /ASSERT\./! s/^(.*[^[:blank:]].*)(SP\.)/\1\n\2/

    # for lines containing "ASSERT.", add a newline before the last "SP."
    s/^(.*ASSERT\..*SP\..*)(SP\..*)/\1\n\2/
' file

관련 정보