sed에서 범위 패턴과 일치하는 줄을 제외하는 방법은 무엇입니까? [복사]

sed에서 범위 패턴과 일치하는 줄을 제외하는 방법은 무엇입니까? [복사]

sed일련의 패턴 내에서 텍스트를 인쇄하려고 시도하는 표현식을 작성 중입니다 .

apt-cache showpkg gdm | sed -n '/Reverse Depends:/,/Dependencies:/ p'

이것은 기본적으로 작동하며 현재 출력은 다음과 같습니다.

Reverse Depends: 
  libgdm1:i386,gdm 3.8.3-3~
  ...
  ...
  gnome-control-center-data,gdm 3.0
Dependencies: 

하지만 나는 패턴 자체를 포함하는 행을 원하지 않고 다음을 원합니다.

  libgdm1:i386,gdm 3.8.3-3~
  ...
  ...
  gnome-control-center-data,gdm 3.0

출력을 grep옵션 으로 파이프할 수 있다는 것을 알고 있습니다 -v.

grep -v "Reverse Depends:"

sed하지만 선택의 여지가 있었으면 좋겠어요 . 나는 열심히 노력했다

$ apt-cache showpkg gdm | sed -n '/Reverse Depends:/-1,/Dependencies:/-1 p'

하지만 작동하지 않습니다.

sed: -e expression #1, char 19: unknown command: `-'

답변1

첫 번째 줄과 첫 번째 패턴 사이, 두 번째 패턴과 마지막 줄 사이의 모든 내용을 삭제하세요.

apt-cache showpkg gdm | sed '1,/Reverse Depends:/d;/Dependencies:/,$d'

첫 번째 패턴이 첫 번째 줄에 나타나고정규식 검사를 너무 많이 수행하면 성능에 영향을 줄 수 있습니다..

더 좋은 방법:

$ apt-cache showpkg gdm |
  sed -n '/Reverse Depends:/{
    :1
    n
    /Dependencies:/q
    p
    b1
  }'

관련 정보