文字列を含まないすべての行と隣接する行をどのように印刷しますか?

文字列を含まないすべての行と隣接する行をどのように印刷しますか?

私はその仕事に集中しようとしています。Auto-installed: 1次の出力に含まれるすべての行と前の2行を除外したいと思います。私は間違いなくこれがgrep -v -B2 string問題を解決すると思いました。言うまでもなく、状況はさらに悪化しました。

内容は次のとおりです。

Package: libopencore-amrwb0
Architecture: amd64
Auto-Installed: 1

Package: transfig
Architecture: amd64
Auto-Installed: 0

Package: xfig-libs
Architecture: amd64
Auto-Installed: 1

Package: xaw3dg
Architecture: amd64
Auto-Installed: 0

結果は次のとおりです。

Package: transfig
Architecture: amd64
Auto-Installed: 0

Package: xaw3dg
Architecture: amd64
Auto-Installed: 0

(空白行は表示されません。空白行が表示されない場合はプラスですが必須ではありません。結果には、サイレントインストール値が0のパッケージも含める必要があります。)

私もできることを知っています改行文字の一致しかし、何も印刷されないか、すべてが印刷されますが、間に改行があります。

どんな解決策でも許されます。 grep(Emacsでも)。

ベストアンサー1

データがどのように構成されているかはよくわかりませんが、表示されているとしたら、次はどうですか?

grep -B2 'Auto-Installed: [^1]'

これは各セクションに1行が含まれていると仮定しますが、Auto-Installedこれは正確ではないかもしれません。

これはawkプログラムです。

awk 'BEGIN{deleted=3}
     !deleted{printf "%s",l[NR%3]}
     deleted {--deleted}
     {l[NR%3]=/./?$0"\n":$0}
     /Auto-Installed: 1/{deleted=3}
     END{for(i=NR+deleted;i<NR+3;++i)printf "%s",l[i%3]}'

おすすめ記事