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

最初の行と最初のパターンの間、2番目のパターンと最後の行の間のすべての内容を削除します。

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
  }'

関連情報