Итак, вы пытаетесь вызвать внешнюю команду из шаблона замены подстановки sed. Я не думаю, что это можно сделать, $ ... внутри шаблона просто позволяет вам использовать уже существующую (постоянную) переменную оболочки.
Я бы пошел с Perl, см. Параметр / e в операторе search-replace (s /.../.../ e).
ОБНОВЛЕНИЕ : Я был не прав, sed прекрасно играет с оболочкой, и это позволяет вам делать это. Но тогда, обратная реакция в \1
должна быть исключена. Попробуйте вместо:
sed "s/^URL=\(.*\)/TITLE=$(curl -s \\1 | head -n 1)/" file.txt