Всем привет. Я новичок в программировании на Bash Помогите пожалуйста написать функцию, которая принимает в качестве параметра имя поля, значение поля и имя файла. Функция должна находить в файле параметр с заданным именем и менять значение этого параметра. Пример файла:
Key1 Value1
#Key2 Value2
Key3 Value3
Например я хочу редактировать /etc/ssh/sshd_config поле Port и изменить значение с 22 на другое. При этом эта строка изначально закомментирована. Код для раскомментирования я написал, а вот с заменой у меня затык. Вот что у меня есть
#!/bin/bash
#comment string
comment(){
sed -i "/^$1/ c# $1" $2
}
#uncomment string
uncomment(){
if str1=$(awk '/^# *'"$1"' +/ {gsub(/^#|^# +/,""); print}' $2)
then
IFS=$'\n' read -d '' -r -a lines <<< "$str1"
for x in "${lines[@]}"
do
sed -i "s/^# *$x/$x/" $2
done
fi
}
#get field value
get_field_value(){
FIELD_VALUE=$(awk '/^# *'"$1"' +/ {gsub(/^#|^# +/,""); print $2;exit;}' $2)
}
#set field
set_field_value(){
get_field_value $1 $2
awk -v field_name="$1" -v field_value="$FILED_VALUE" -v change_to="$3" '{if($1==field_name || $2==field_name) gsub(/.*field_value.*/, "change_to"); print}' $2
}
#replace field
replace_field(){
sed "s/$1/$2/g"
}
set_field_value test test 777