Não tenho certeza do que você está tentando substituir (com um - ou _ no primeiro caso), mas isso funciona bem para mim:
$ echo "<%_" | sed 's/<%_/_/'
_
$ echo "<%_" | sed 's/<%_/-/'
-
$ echo "_%>" | sed 's/_%>/\]/'
]
Parece que você está escapando dos identificadores regex (o /).