Primeiro: as barras invertidas de escape não são por causa do shell - a string é simples. Pelo contrário, é por causa do sed
em si.
Em segundo lugar: a resposta de Chris Down tem algum mérito - não use martelo em vez de chave de fenda. Por outro lado, portabilidade e links simbólicos nem sempre são um problema, se for o caso, ambos
sed '1i\\def\submit{}'
e
sed '1i\def\submit{}\'
Deve fazer o que você precisa. Eu não fui capaz de descobrir por que a barra invertida na última forma desativa escapar na string, mas parece funcionar assim, pelo menos no GNU sed
quando os comandos são colocados em uma linha de comando. Quando usado em um script, apenas o primeiro formulário parece funcionar (porque a barra invertida é usada para denotar o fim da linha que é seguido por outro):
#!/bin/sed -f
1i\
\def\submit{}