Within a bracketed expression,
[...], very few character are "special" (only a very small subset, like
^, and the three combinations
[.). When including
] must come first (possibly after a
^). I opted to put the
] first and the
[ last for symmetry.
The only other thing to remember is that a single quoted string can not include a single quote, so we use double quotes around the expression. Since we use a double quoted string, the shell will poke around in it for things to expand. For this reason, we escape the
\$ which will make the shell give a literal
grep, and we escape
\! too as it's a history expansion in
bash (only in interactive
bash shells though).
Would you want to include a backslash in the set, you would have to escape it as
\\ so that the shell gives a single backslash to
grep. Also, if you want to include a backtick
`, it too must be escaped as
\` as it starts a command substitution otherwise.
The command above would extract any line that contained at least one of the characters in the bracketed expression.
Using a single quoted string instead of a double quoted string, which gets around most of the annoyances with what characters the shell interprets:
Here, the only thing to remember, apart from the placing of the
], is that a single quoted string can not include a single quote, so instead we use a concatenation of three strings: