Matching back references according to re_format(7): Finally, there is one new type of atom, a back reference: ‘\’ followed by a non-zero decimal digit d matches the same sequence of characters matched by the dth parenthesized subexpression (numbering subexpressions by the positions of their opening parentheses, left to right), so that (e.g.) ‘\([bc]\)\1’ matches ‘bb’ or ‘cc’ but not ‘bc’. does not always seem to work. For instance, I would expect all of these to print the single input line: $ echo '#20#20' | sed -n -E -e '/(#|0x)(..)\1\2/p' $ echo '#2020#' | sed -n -E -e '/(#|0x)(..)\2\1/p' $ echo '#202020' | sed -n -E -e '/(#|0x)(..)20\2/p' #202020 $ echo '#202020' | sed -n -E -e '/(#|0x)(..)\2(20)/p' $ echo '#202020' | sed -n -E -e '/(#|0x)(..)(20)\2/p' #202020 $ echo '#202020' | sed -n -E -e '/(#|0x)(..)..\2/p' #202020 $ echo '#20#20' | sed -n -E -e '/(#|0x)(..).\2/p' #20#20 Additionally, gsed(1) equivalent invocations work as expected.