LINUX.ORG.RU

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

 


0

1

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


Я новичок в программировании на Bash

Это хорошо, ещё не поздно остановиться и взять нормальный язык программирования.

anonymous
()

находить в файле параметр с заданным именем и менять значение этого параметра.

Это можно сделать одной командой.

Deleted
()
Ответ на: комментарий от anonymous

Нормальный язык программирования возьму но задание у меня написать на баше. Я птичка подневольная)))

TmYAG
() автор топика
Ответ на: комментарий от TmYAG
$ replace_value () { sed -En '/'$2'/{s/(\s*#*)//;s/^(\s*'$2'\s*).*/\1'$3'/;p}' $1 ; }
$ replace_value /etc/ssh/ssh_config Port 33
   Port 33

Deleted
()
Ответ на: комментарий от TmYAG

Как-то так, на телефоне не проверю sed «s/\s*#*\s*$key\w.*/$key $newvalue/»

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.