LINUX.ORG.RU

grep и комбинация шаблонов


0

0

При выполнении

ps aux | grep "emake"

выдает

<...>  0:00 /bin/bash /usr/lib/portage/bin/emake
<...>  0:00 grep emake

1. Как сделать, чтобы grep не вывдавал совпадение с самим собой в данном 
конкретном случае? (ps aux | grep emake | grep -v grep не предлагать :))

2. Можно ли вообще задать в одном регекспе два паттерна ("ABC" и "DEF")
так, чтобы находились строки, в которых ABC присутствует, а DEF - нет?

★★

а команда man grep не помогла?

насчет первого, можно сказать grep что строка emake должна быть
вначале

fghj ★★★★★
()

Маны говорят, что стоит подумать об -o и -C.

DonkeyHot ★★★★★
()

>1. Как сделать, чтобы grep не вывдавал совпадение с самим
> собой в данном конкретном случае? ( ps aux | grep "emake" )

В данном конкретном случае, лучше использовать pgrep 'emake' (возвращает PID)

sdio ★★★★★
()

Всем конечно спасибо, но не на один вопрос мой вы так и не ответили. Маны конечно рулят, поэтому с man grep я знаком достаточно хорошо.

>насчет первого, можно сказать grep что строка emake должна быть
>вначале

Не понял. Вначале чего?

>Маны говорят, что стоит подумать об -o и -C
Что-то я не понисаю, зачем эти опции в моем случае.

Хорошо, может недостаточно понятно задал вопрос. Он скорее про регекспы, наверное... Переформулирую.
Можно ли задать сочетание опций и шаблона для _одного_ экземпляра grep, чтобы выводились строки, в которых есть одна часть шаблона, но нет другой, напимер:

1.txt:
---
1 M ABC DEF
2 P ABC
3 J DEF
---

Хочу только строку "2 P ABC" после команды
# cat 1.txt | grep <что-то>

т.е. то, что получаю с двумя grep'aми
cat 1.txt | grep "ABC" | grep -v DEF

octy ★★
() автор топика

По поводу первого вопроса есть еще такой трюк:

ps aux | grep '[e]make'

То есть один из символов заключается в квадратные кавычки. Смысл регекспа при этом не меняется, а вот совпадения с самим вызовом grep уже не происходит.

anonymous
()
Ответ на: комментарий от octy

>>насчет первого, можно сказать grep что строка emake должна быть
>>вначале
>
>Не понял. Вначале чего?

Я имел ввиду в конце :)

ps aux | grep 'emake$'

>поэтому с man grep я знаком достаточно хорошо

тогда info grep

fghj ★★★★★
()
Ответ на: комментарий от octy

>cat 1.txt | grep "ABC" | grep -v DEF

имхо, такой путь самый простой.

но есть '^'

fghj ★★★★★
()

> но есть '^'...

Насколько понимаю, так можно делать NOT только символам, но не целым словам.

За info спасибо - как раз там в разделе usage нашел ответ на оба вопроса. (Кстати, они сами предлагают два grep'a по конвееру:)).

octy ★★
() автор топика
Ответ на: комментарий от octy

>Можно ли задать сочетание опций и шаблона для _одного_ экземпляра
>grep, чтобы выводились строки, в которых есть одна часть шаблона,
>но нет другой, напимер:
>
>1.txt:
>---
>1 M ABC DEF
>2 P ABC
>3 J DEF
>---
>
>Хочу только строку "2 P ABC" после команды
># cat 1.txt | grep <что-то>

cat 1.txt | awk '/ABC/ && ! /DEF/'

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.