Вы можете упростить набор «похожих» sed замен до следующего:
cat replace.sh
#!/bin/bash
replace () {
var=$2
new_val=$3
sed -e "s/^$var *= *.*/$var = $new_val/; s/^$var [^=]*$/$var $new_val/" "$1" | grep $var
}
replace test.conf setting1 value1new
replace test.conf setting2 value2new
replace test.conf setting3 value3new
replace test.conf setting4 value4new
Использование :
bash replace.sh
Вывод:
setting1 value1new
setting2 = value2new
setting3 = value3new
setting4 = value4new
sed -n "s/^$var[ =].*/$var = $new_value/p" "$file"
Достаточно поставить после переменной либо пробел, либо знак равенства, тогда одна замена подходит всем.
При использовании опции -n
и p
после замены вам не нужен grep
. sed
уже нашел нужную строку.