LINUX.ORG.RU

Сообщения TmYAG

 

Bash. Изменить значение поля в файле

Форум — General

Всем привет. Я новичок в программировании на 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

 

TmYAG
()

RSS подписка на новые темы