GNU sed processes escape sequences before passing
the text onto the regular-expression matching of the s/// command
and address matching. Thus the following two commands are equivalent
(‘0x5e’ is the hexadecimal ASCII value of the character ‘^’):
$ echo 'a^c' | sed 's/^/b/' ba^c $ echo 'a^c' | sed 's/\x5e/b/' ba^c
As are the following (‘0x5b’,‘0x5d’ are the hexadecimal ASCII values of ‘[’,‘]’, respectively):
$ echo abc | sed 's/[a]/x/' xbc $ echo abc | sed 's/\x5ba\x5d/x/' xbc
However it is recommended to avoid such special characters due to unexpected edge-cases. For example, the following are not equivalent:
$ echo 'a^c' | sed 's/\^/b/' abc $ echo 'a^c' | sed 's/\\\x5e/b/' a^c