Почему заключение в регулярное выражение одного символа в скобках исключает сам grep при вычислении ps?

Если я выполню следующую команду grep на моем компьютере с Linux:

$ ps -ef | grep bash
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash
wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto bash

Обратите внимание, что последняя строка сообщает о самом grep, потому что слово "bash" находится в аргументах grep.

Но если вместо этого я поставлю [] вокруг любой буквы в "bash", я получу:

$ ps -ef | grep ba[s]h
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash

На этот раз нет информации о grep!

Итак, почему заключенная в поисковый запрос буква, то есть регулярное выражение, в скобках не дает grep сообщать о себе здесь? Хотя я [s] имел в виду "любой символ из [] вложенного набора, состоящего из символа"s".

2 ответа

Решение

Это потому что выражение ba[s]h (или же [b]ashили...) просто совпадает bashне ba[s]h (или же [b]ash, или же...).

Итак grep Команда ищет все строки с bash:

root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash

но

wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto ba[s]h

не совпадает, потому что это не совсем bash,

Федорки прибивает его объяснением уловки класса персонажа. Я просто хотел указать на другой метод, который использовал довольно часто, хотя и немного дольше, чем то, что вы уже знали, было использовать -v вариант grep команда.

ps -ef | grep bash | grep -v grep
Другие вопросы по тегам