Синтаксис подстановки команд $(..)
работает , а не , работает, если заключен в одинарные кавычки, как и ожидалось в bash
или в большинстве других оболочек, поскольку они сохраняют литеральное значение, присутствующее внутри.Чтобы ваша замена произошла, поместите ее в двойные кавычки как
sed -i 's@127.0.0.1@'"$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)"'@g' httpd.conf
Сравните выходные данные echo '$(date)'
и echo "$(date)"
для простого примера вашего случая.