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 部分,它會起作用,但僅限於有等號的地方。
任何想法我做錯了什麼?
您可以將一組“相似”的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
-n
和p
替換後的grep
.sed
確實已經 grep 了正確的行。