Romik ([info]romik_g) wrote,
@ 2007-06-18 13:46:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:administrating linux, howto

Надо бы запомнить... grep одновременно по 2м и более выражениям.
Задача была такая: упростить выражение вида

stdout | grep cat | grep dog | grep bat | grep rat | ...
в что-либо более простое.
Выяснилось, что обычный grep/egrep этого делать не умеет. Оператор "ИЛИ" у него есть (|), а вот оператора "И" нет. Есть утилита agrep, которая с такой задачей справляется примерно так:
agrep 'cat;dog;bat'
, но такой утилиты у меня в системе нет.
Найденные варианты:
sed '/cat/!d; /dog/!d; /bat/!d'
awk '/cat/ && /dog/ && /bat/'
perl -ne 'print if /cat/ && /dog/ && /bat/'
Запоминайте, вдруг пригодится...



(Post a new comment)


[info]dework
2007-06-18 10:41 am UTC (link)
А ещё, если сделать
tail -f file | grep 'dog' | sed 's/$/\n--------------------/g' - то работать не будет.
А если
tail -10 file | grep 'dog' | sed 's/$/\n--------------------/g' - то будет работать.
Не колдунство ли?

(Reply to this) (Thread)


[info]romik_g
2007-06-18 12:01 pm UTC (link)
tail -f testt | awk '/dog/{print $0,"\n-------------------"}'

Пойдёт?

(Reply to this) (Parent)(Thread)


[info]dework
2007-06-18 12:23 pm UTC (link)
ну, вариантов много8)
именно что с буферизацией странные вещи вытворяются.
посему без длинных пайп-цепочек спокойней%)

(Reply to this) (Parent)


[info]romik_g
2007-06-18 12:02 pm UTC (link)
Там что-то с буферизацией ввода-вывода... в grep, как я понимаю...

(Reply to this) (Parent)


[info]erthad
2007-07-04 07:00 pm UTC (link)
А что толку? По длине примерно то же получается, а программно вызывать - однохуйственно то или другое.

(Reply to this)


[info]erthad
2007-07-04 07:02 pm UTC (link)
В любом случае, выигрывать возможно будет лишь по производительности, а по понятности, пожалуй, первый вариант кода самый понятный будет...
Хотя, впрочем, второй и там где используется "&&" тоже понятны с налету будут..

(Reply to this)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…