sed의 예약된 공간을 사용해야 합니까?

sed의 예약된 공간을 사용해야 합니까?

로컬 xinitrc의 마지막 세그먼트를 제외하고 시스템 xinitrc를 가져오고 싶기 때문에 다음을 사용합니다.

    % sed -n 'H
            /^exec ./{
                    x
                    s/\([^\n]\+\n\)\+exec.*//
                    p
            }' /etc/X11/xinit/xinitrc

즉, ^exec마주치면 exec 줄과 해당 단락의 위 부분을 제외한 모든 것을 인쇄합니다.

내 질문은: 이것을 더 간단하게 만들 수 있습니까? 예를 들어, 예약된 공간을 사용하지 않고 할 수 있나요? N을 사용해 보았지만 예상대로 작동하지 못했습니다.

답변1

에서 sed"및 해당 단락의 전술한 부분"은 기본적으로 '예'를 의미합니다. 다음 줄의 내용을 기준으로 한 줄을 인쇄할지 여부를 결정하려면 거의 버퍼를 사용해야 하는데,~하지 않는 한패러다임을 재구성할 수 있습니다.

"단락"의 정의는 무엇입니까? 일관성이 있나요? 상당히 임의적인 레코드 구분 기호를 정의할 수 있습니다 perl. awk다음과 같이 시도해 볼 수 있습니다.

$: awk 'BEGIN{ RS="if " }
        /exec/{ exit; }
        { print }
       ' /etc/X11/xinit/xinitrc

그러나 더 나은 구분 기호를 얻으려면 데이터를 조사하는 것이 좋습니다.

관련 정보