# grep -v -A2

## 013

товарищи гуру, как заставить греп в выводе исключить искомую строку + 2 строки после?

grep SOMETHING -A2 - вывод искомого + 2 строки после

grep SOMETHING -v - вывод всего кроме SOMETHING

как сделать grep SOMETHING -v -A2 ???

возможно ли это грепом вообще? 

PS: стоит grep-2.5.1a-r1

----------

## asser-mag

grep SOMETHING -A2 | grep -v SOMETHING

----------

## zvn

тут только надо помнить, что grep -A выводит указанное количество строк после последней строки с совпадением.

----------

## ba

ммм... могу седом...

```
sed '/SOMETHING/,+2d'
```

----------

## 013

 *Quote:*   

> grep SOMETHING -A2 | grep -v SOMETHING

 

не то, сейчас пример кину

есть файл:

```
*  media-plugins/gst-plugins-ximagesrc [ Masked ]

      Latest version available: 0.10.7

      Latest version installed: [ Not Installed ]

      Size of files: 1,705 kB

      Homepage:      http://gstreamer.freedesktop.org/

      Description:   plugin for gstreamer

      License:       GPL-2

 media-plugins/gst-plugins-xvideo

      Latest version available: 0.10.14

      Latest version installed: 0.10.14

      Size of files: 1,587 kB

      Homepage:      http://gstreamer.freedesktop.org/

      Description:   plugin for gstreamer

      License:       GPL-2

*  media-plugins/gst-plugins-theora

      Latest version available: 0.10.14

      Latest version installed: [ Not Installed ]

      Size of files: 1,587 kB

      Homepage:      http://gstreamer.freedesktop.org/

      Description:   plugin for gstreamer

      License:       GPL-2 
```

Я хочу вывести все установленные пакеты. Но максимум чего я смог добиться, это вывести все НЕ установленные паеты, другими словами абсолютно все, кроме того что мне надо.

```

cat txt-file | grep 'Not Installed' -A4 -B2

*  media-plugins/gst-plugins-theora

      Latest version available: 0.10.14

      Latest version installed: [ Not Installed ]

      Size of files: 1,587 kB

      Homepage:      http://gstreamer.freedesktop.org/

      Description:   plugin for gstreamer

      License:       GPL-2 

*  media-plugins/gst-plugins-ximagesrc [ Masked ]

      Latest version available: 0.10.7

      Latest version installed: [ Not Installed ]

      Size of files: 1,705 kB

      Homepage:      http://gstreamer.freedesktop.org/

      Description:   plugin for gstreamer

      License:       GPL-2

```

 *Quote:*   

> 
> 
> ```
> sed '/SOMETHING/,+2d'
> ```
> ...

 

спасибо Х) но теперь просто интересно как это сделать grep'ом

----------

## 013

 *Quote:*   

> 
> 
>  *Quote:*   
> 
> ```
> ...

 

ошибочка вышла, сейчас проверил - не то он выводит. скорее всего из-за того, что я пример не выкладывал

----------

## zvn

если уж говорить на примерах, то вот как можно, только я смотрел не -A, а -B

```

emerge -s mozilla >./1

cat ./1 |grep "Latest version installed" -B 2 >./2

cat ./2 |grep "Not Installed" -B 2 >./3

diff ./2 ./3 >./4

```

С другой стороны, не проще отработать

```

equery l

```

----------

## 013

решение нашли тут:

https://forums.gentoo.org/viewtopic-t-667733.html

----------

## burik666

можно так

 *Quote:*   

> esearch lala|grep -E "installed:.{12}[^[]" -B 2 -A 4

 

----------

## dragon1020

А можно это сделать не emerge+grep, а eix, что _значительно_ быстрее будет.

Ну или так, если интересует именно греп:

```
emerge -s something | grep "Latest version installed: [^[]" -B2 -A4
```

burik666,  имхо ".{12}" там не нужно.

----------

## burik666

 *dragon1020 wrote:*   

> burik666,  имхо ".{12}" там не нужно.

 

Если использовать emerge -s тогда не нужен. А если esearch, то необходимо. т.к. там выделение цветом.

----------

## Hyperwyrm

Может конечно немного не в тему, но вот как я вывожу список установленного ПО

```

#!/bin/sh

APPDIR=/var/db/pkg

LOGDIR=~/logs

LOGFILE=installed-apps.log

if [ ! -d ${LOGDIR} ]; then

        mkdir ${LOGDIR}

fi

cat /dev/null > ${LOGDIR}/${LOGFILE}

for app_cat in `ls ${APPDIR}`

do

        echo "${app_cat}:" >> ${LOGDIR}/${LOGFILE}

        for app_name in `ls ${APPDIR}/${app_cat}`

        do

                echo "     ${app_name}" >> ${LOGDIR}/${LOGFILE}

        done

done

if [ "$1" == "-i" ]; then

        less ${LOGDIR}/${LOGFILE}

fi

```

----------

## burik666

find /var/db/pkg/ -name PF -exec cat {} \;

не идеал.

----------

## burik666

```
esearch -I \*
```

и никакого grep

----------

