Назад | Перейти на главную страницу

Любой способ избежать использования grep -v

При выполнении фильтрации grep по каналам, как в следующем примере,

$ ps -ef | grep 24604 
username   18660 24604  0 16:38 pts/3    00:00:00 ps -ef
username   18661 24604  0 16:38 pts/3    00:00:00 grep --color=auto 24604
username   24604 23548  0 Aug13 pts/3    00:00:00 /bin/bash

сама команда grep является частью результатов, и обычно - я отфильтровываю ее другим grep -v, а именно:

$ ps -ef | grep 24604 | grep -v grep
username   20375 24604  0 16:40 pts/3    00:00:00 ps -ef
username   24604 23548  0 Aug13 pts/3    00:00:00 /bin/bash

Есть ли grep аргумент, который отфильтрует строку grep?
(Или любой другой трюк, чтобы избежать grep -v?)

Обычно это делается путем заключения первого символа в скобки:

$ ps auxw | grep [c]ron
root      5710  0.0  0.0  10640  1800 ?        Ss   14:41   0:00 /usr/sbin/cron
$

Это работает, потому что cron больше не появляется в greps командная строка ([c] ron делает). Более современный подход - использовать pgrep команда, если есть.

Как насчет:

pgrep -l 24604

Это действительно зависит от использования, но pgrep обычно больше подходит для автоматизации, что, вероятно, и пытаетесь сделать вы.