Sed

sed 函式替換任何配置文件條目

  • May 11, 2017

我正在嘗試為 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 部分,它會起作用,但僅限於有等號的地方。

任何想法我做錯了什麼?

您可以將一組“相似”的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
sed -n "s/^$var[ =].*/$var = $new_value/p" "$file"

用空格或等號跟隨變數就足夠了,然後一個替換就可以了。

通過使用 option-np替換後的grep. sed確實已經 grep 了正確的行。

引用自:https://unix.stackexchange.com/questions/364495