Почему заключение в регулярное выражение одного символа в скобках исключает сам 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