grep - dlaczego nawiasy kwadratowe we wzorze grep usuwają proces grep z wyników ps?

12

Dlaczego nawiasy we grepwzorcu usuwają proces grep z pswyników?

$ ps -ef | grep XXXX

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


$ ps -ef | grep [X]XXX

[...] XXXX
Gilles „SO- przestań być zły”
źródło
2
To przede wszystkim świetna sztuczka!
Kevin Cantu
Dalsze odpowiedzi na to pytanie znajdują się tutaj unix.stackexchange.com/questions/78771/…
erch

Odpowiedzi:

20

Po uruchomieniu ps -ef | grep stringgrep jest wyświetlany na wyjściu, ponieważ stringpasuje [...] grep string.

Ale po uruchomieniu ps -ef | grep [s]tringlinii nie jest wyświetlany, ponieważ grep przekłada [s]tringsię string, natomiast wyjścia ps [...] grep [s]tring, i że nie pasujestring

Stefan
źródło
1
... ponieważ []reprezentuje dowolny zestaw znaków w nawiasach, w tym przypadku „s” jest jedynym…
Wstrzymany do odwołania.
tak ... naprawdę miałem problem z wyjaśnieniem tego po angielsku ... to nie jest mój pierwszy język :)
Stefan
2

Ponieważ nawiasy klamrowe muszą być poprzedzone znakiem ucieczki, dla bash raz i dla grep:

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

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


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

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

źródło