Классный трюк, который избавляет вас от необходимости использовать grep -v при выводе grep ps (да, я знаю, что pgrep существует), заключается в том, чтобы поместить первую букву процесса в класс символов, например ps -ef |grep [s]vn
. Это исключит grep svn
от включения в вывод. Почему это работает? GNU grep.
Grep ищет регулярное выражение, например [Pp]rocess
найду Process
или process
, но интересным побочным эффектом является то, что в командной строке операции grep есть ]
застрял там, что означает, что строка grep не содержит слова process
, он содержит слово p]rocess
, что не соответствует.
Так эффективно вы удаляете слово process
из вашей строки grep, поместив туда закрывающую скобку, но все же позволяя ей соответствовать слову в других строках.
Квадратные скобки являются частью сопоставления с образцом в grep. В принципе grep
получает базовое регулярное выражение:
[12p] rocess будет расширен до: 1process 2rocess process
Теперь grep будет искать [1]rocess
[2]rocess
[p]rocess
что - как видите - это не process
.
Квадратные скобки соответствуют классу символов в регулярных выражениях. Вы можете узнать больше о регулярных выражениях и сопоставлении символов здесь: