2012-05-12 2 views
1

cfg 파일의 설정을 읽고 쓰는 쉘 스크립트를 사용하여 Linux에서 구성 파일을 관리해야합니다. 나는 내 스크립트에 사용 된 기존 구성 파일에 key의 새 value을 작성하는 다음 기능을 가지고 있습니다.쉘 스크립트를 통해 sed를 사용하여 구성 파일 관리

set_setting() { 
    sed -i "s/$1=[^ ]*/$1=$2/" $3 
} 

사용법 :

set_setting keyname NewValue /home/Config.cfg

는 따라서,이 NewValueConfig.cfgkeyname의 값을 대체 할 것이다.

또한 source 명령을 사용하여 구성 파일을 읽는 기능이 get_setting입니다. 비슷하게 두 개의 매개 변수 keyname과 원본 구성 파일을 받아들이고 제공된 키의 value을 반환합니다.

이제 문제는 구성 파일이 다음과 같습니다.

name=Abc 
surname=Xyz 

내가 set_setting name Def /home/Config.cfg으로 set_setting 함수를 호출 할 때, 이상적으로는 DefAbc에서 name의 값을 변경해야하지만, 키 name의 값을 변경과 함께, 또한 얻어진 DefXyz에서 surname의 값을 변경 구성 파일에서 다음을 수행하십시오. 예상 name의 값이 변경되면서

name=Def 
surname=Def 

나는 이것이 내가 surnames에 키 surname을 변경하는 경우와 같이, 두 키에서 일반적인 용어 "이름"을 가진 때문이다 의심, 그것은했다. 또한 키의 값은 공백 이외의 다른 값이 될 수 있습니다.

저는 쉘 스크립팅을 처음 접했고 최근에 sed 명령을 발견했습니다.

나는 또한 thisthis 질문을 참조했습니다. 둘 다 매우 도움이되었지만, 나는 위에서 언급 한 상황에 처해있다.

답변

2

당신은 행의 시작 부분에 일치를 고정해야합니다

sed -i "s/^$1=[^ ]*/$1=$2/" $3 

주에게 ^$1 앞에. 이 정규 표현식 연산자는 행의 처음에 표현식을 고정 시키므로 첫 문자부터 = 부호까지 모든 이름이 필요합니다. $이라고하는 end-of-line 앵커가 있습니다 (여기서는 필요 없습니다).

+0

바보 같았습니다. :-) 많이 고마워! – Kushal

관련 문제