Как сказал @potong, вы не можете использовать опцию q
sed в многострочном файле, потому что он никогда не будет работать , если в каждой строке нет того, что вы ищете.
Если вы хотите выполнить поиск, если что-то присутствует или нет, вы можете использовать grep
перед выполнением замен.
Вы можете сделать что-то подобное:
#!/bin/bash
if grep -q -e "${OLD_IP_ADDRESS}" "${system_file}"; then
sed -i -e "s/${OLD_GATEWAY}/${NEW_GATEWAY}/" "${system_file}"
else
exit 100
fi
Этот фрагмент кода заменит каждое первое вхождение (опция g
не используется) ${OLD_GATEWAY}
на ${NEW_GATEWAY}
в каждой строке, только если ${OLD_IP_ADDRESS}
присутствует хотя бы один раз в файле.
Есливам нужен oneliner, вы можете использовать что-то вроде:
grep -q -e "${OLD_IP_ADDRESS}" "${system_file}" && sed -i -e "s/${OLD_GATEWAY}/${NEW_GATEWAY}/" "${system_file}"
, зная, что код выхода будет отличаться от 100
.