sed 기능은 모든 구성 파일 항목을 대체합니다.

sed 기능은 모든 구성 파일 항목을 대체합니다.

우리 회사 표준에 맞게 구성 파일을 수정하는 SLES/RHEL용 빌드 스크립트를 작성하려고 합니다. 일부 구성은 설정=값 형식이고 일부는 단지 설정=값입니다. 현재 sed를 사용하고 있는데 거의 다 온 것 같은 느낌이 들지만 등호가 없으면 작동하지 않습니다.

현재 코드: (죄송합니다. 아직 형식을 올바르게 지정하는 데 능숙하지 않습니다...)

$ cat test.conf
setting1 value1 
setting2= value2
setting3 = value3
setting4 =value4 

현재(테스트) 기능:

#!/bin/bash
replace () {  
file=$1  
var=$2  
new_value=$3



sed -e "s/^$var=.*/$var = $new_value/" -e "s/^$var =.*/$var = $new_value/" -e "s/^$var.*/$var = $new_value/" -e "s/^$var /$var $new_value/" "$file"|grep $var  

}


replace test.conf setting1 value1new 
replace test.conf setting2 value2new  
replace test.conf setting3 value3new  
replace test.conf setting4 value4new

그러나 나는 다음과 같은 결과를 얻습니다.

$ ./functiontest
setting1 value1new= value1new 
setting2 value2new= value2new 
setting3 value3new= value3new 
setting4 value4new= value4new

마지막 sed 부분을 꺼내면 등호가 있는 부분에만 작동합니다.

내가 뭘 잘못하고 있는지 어떤 아이디어가 있습니까?

답변1

"유사한" 집합을 단순화할 수 있습니다.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

답변2

sed -n "s/^$var[ =].*/$var = $new_value/p" "$file"

변수 뒤에 공백이나 등호를 추가하면 충분하며 한 번만 대체하면 모든 요구 사항이 충족됩니다.

-n옵션 과 대체 항목을 사용하면 이미 올바른 줄을 찾을 p필요가 없습니다 .grepsed

관련 정보