grep - почему скобки в шаблоне grep удаляют процесс grep из результатов ps?


12

Почему скобки в grepшаблоне удаляют процесс grep из psрезультатов?

$ ps -ef | grep XXXX

[...] XXXX
[...] grep XXXX


$ ps -ef | grep [X]XXX

[...] XXXX

2
Во-первых, это отличный маленький трюк!
Кевин Канту

Дальнейшие ответы на этот вопрос приведены здесь unix.stackexchange.com/questions/78771/…
erch

Ответы:


20

Когда вы запускаете ps -ef | grep string, grep отображается в выводе, потому что stringсовпадает [...] grep string.

Но, когда вы запускаете, ps -ef | grep [s]tringстрока не отображается, потому что grep переводит [s]tringв string, а ps выводит [...] grep [s]tring, и это не совпадаетstring


1
... потому что []представляет собой любой из набора символов, в скобках которого, в данном случае, "s" является единственным ...
Приостановлено до дальнейшего уведомления.

да ... у меня действительно были проблемы с попыткой объяснить это по-английски ... это не мой родной язык :)
Стефан

2

Поскольку скобки нужно экранировать, для bash один раз и для grep снова:

$ ps -ef | grep \\[X\\]XXX

[...] XXXX
[...] grep XXXX


$ ps -ef | grep "\[X\]XXX"

[...] XXXX
[...] grep XXXX
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.