
Когда я ищу какой-то несуществующий процесс, например
$ ps aux | grep fnord
wayne 15745 0.0 0.0 13580 928 pts/6 S+ 03:58 0:00 grep fnord
Разумеется, мне нет дела до grep — это не имеет такого же смысла, как и поиск процесса ps
!
Как сделать так, чтобы grep не отображался в результатах?
решение1
Оказывается, решение найдено вБрелок.
$ ps aux | grep "[f]nord"
Заключив букву в скобки, а строку — в кавычки, вы найдете регулярное выражение, которое гласит: «Найдите символ 'f', за которым следует 'nord'».
Но поскольку вы поместили скобки в шаблон, за «f» теперь следует «]», поэтому он grep
не будет отображаться в списке результатов. Здорово!
решение2
Другой вариант, который я использую (особенно, чтобы просто посмотреть, запущен ли процесс), — это команда pgrep
. Она будет искать соответствующий процесс, но не выводить строку grep для поиска. Мне нравится, потому что это быстрый способ поиска, без регулярных выражений или экранирования чего-либо.
pgrep fnord
Более того, чтобы вывести как идентификатор процесса, так и имя сопоставляемого процесса, используйте (спасибофеммер)
pgrep -l fnord
решение3
Идеальное решение — это то, что предложил BriGuy
pgrep fnord
Но если вы не хотите этого делать, вы можете просто исключить все строки, которые соответствуютгрэпс:
ps aux | grep -v grep | grep "fnord"
решение4
В ЗШ, grep fnord =(ps aux)
.
Идея в том, чтобы сначала запустить ps aux
, поместить результат в файл, а затем использовать grep
его. Только у нас нет файла, так как мы используем "подстановку процесса" zsh.
Чтобы проиллюстрировать, попробуйте
ps aux > ps.txt
grep fnord ps.txt
rm ps.txt
Результат должен быть тем же.
Общее замечаниена некоторые другие ответы. Некоторые слишком сложны и/или их долго печатать. Это не только вопрос правильности, это должно быть также удобно для использования. Но это не значит, что некоторые из этих решений плохи; просто их нужно обернуть в мини-пользовательский интерфейс, чтобы сделать их удобными для использования.