Eu sugiro que você teste sem % s -i
do sed primeiro - ou use uma cópia local do arquivo rc.local
.
Você não precisa para testar a presença da string, mas se fizer isso, a maneira correta de substituir a saída do grep seria "$(grep tvservice /etc/rc.local)"
- o caminho você escreveu, testa a string literal $grep tvservice /etc/rc.local
No entanto, uma melhor maneira de IMHO seria fazer um grep para todo o padrão e usar o status de saída do grep diretamente, evitando o teste de regex de shell completamente:
if grep -q '^#.*tvservice' /etc/rc.local; then
sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local
else
echo 1
fi
(Eu removi os espaços ao redor do padrão, já que o texto da sua amostra não os possui).