Sed требует знания, действительно ли в этом файле MONGO_HOST
, поэтому grep входит в решение.
if grep -Fq -- "- name: MONGO_HOST" file.yaml; then
sed 's/^\([[:space:]]\+value:\).*/\1 172.16.87.98/' file.yaml
fi
Оператор if выполняется из оболочки, которая проверяет, действительно ли grep обнаружил шаблон / regexp и выполнить sed
в этом случае.
-F
означает, что grep ищет фиксированные строки, а не BRE (регулярное выражение basi c) или ERE (расширенное регулярное выражение)
-q
означает тихий или тихий вывод.
--
означает конец опций, потому что опции обычно начинаются с da sh -
что-либо после --
grep не будет обрабатывать теперь это опция
Если в этом файле есть / есть более одной строки value:
с регулярным выражением, то sed заменит все. Но, как уже предлагалось, используйте подходящий инструмент для разбора / редактирования файла yaml.
Редактировать: как указано Ranvijay Sachan
sed может проверить наличие шаблона и заменить следующую строку.
Использование командного редактора файлов ed
printf '%s\n' '/MONGO_HOST/+1s/^\([[:space:]]\+value:\).*/\1 172.16.87.98/' w | ed -s file.yaml