Strange bracketing behavior in grep and sed

I finally figured out this thorny issue I have been dealing with for the last hour. In perl, if I can create a character class like „[\[\]a-f]“ which matches any characters a-f, [, and ]. This does not work in grep or sed though. I finally discovered that the right bracket „]“ should not be escaped in grep or sed. I don’t really understand why. Perl will let you do it either way.

You know what they say: „knowing is half the battle.“