Вы должны экранировать '^' и '$':
$ sed 's/allow \^127\.0\.0\.1\$/allow \^107\.21\.206\.35\$/g' test.txt
Без экранирования, '^' соответствует началу строки, а '$' соответствует концу строки.Чтобы точно соответствовать символу, они должны быть экранированы с помощью \.В большинстве реализаций sed используются базовые регулярные выражения, в которых следующие символы должны быть экранированы для буквального соответствия: ^.[$()|*+?{\