標題說明了所有。我需要將我不知道的財產價值換成不同的價值。 我想要這樣的:從shell腳本編輯屬性文件中的屬性值
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
我得到sed: -e expression #1, char 19: unknown option to
s'`
我認爲這個問題是$newvalue
是代表一個目錄,以便它攪亂了sed的字符串。
我該怎麼辦?
標題說明了所有。我需要將我不知道的財產價值換成不同的價值。 我想要這樣的:從shell腳本編輯屬性文件中的屬性值
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
我得到sed: -e expression #1, char 19: unknown option to
s'`
我認爲這個問題是$newvalue
是代表一個目錄,以便它攪亂了sed的字符串。
我該怎麼辦?
sed
可以使用除/
以外的字符作爲分隔符,儘管/
是最常見的。在處理諸如路徑名之類的東西時,使用諸如管道(|
)之類的東西通常會很有幫助。
對於某些seds,您需要'逃避'非標準reg-ex分隔符的第一個實例,如's \ | srch | repl |'。祝你們好運。 – shellter 2011-12-22 17:18:21
如果你的屬性文件的分隔與=
籤這樣的 -
param1=value1
param2=value2
param3=value3
那麼你可以使用awk
確實因剛知道PARAM名 modifiy的參數值的方式。舉例來說,如果我們要修改的param2
在你的屬性文件,我們可以做如下 -
awk -F"=" '/param2/{$2="new value";print;next}1' filename > newfile
現在,上面one-liner
需要你硬編碼參數的時新的價值。如果您在shell腳本中使用它,並且需要從變量中獲取新值,則情況可能不是這種情況。
在這種情況下,你可以做以下 -
awk -F"=" -v newval="$var" '/param2/{$2=newval;print;next}1' filename > newfile
在此,我們創建一個awk
變量newval
,並與您的腳本變量($ VAR),其中包含新的參數值初始化。
如果我想在結尾添加新行(如果該屬性不存在)該怎麼辦? – 2015-08-04 13:33:42
我試過'awk'命令,但它從輸出中去掉'=',所以最終將'HOSTNAME = oldvalue'轉換爲'HOSTNAME newvalue' - 任何想法我錯了什麼? – 2016-05-20 11:46:59
@Oly您需要設置OFS變量。所以'awk -F'='-v OFS ='='...' – 2016-05-20 13:08:58
我從名爲Kongchen的人發現了一個函數。他寫了一個函數腳本來更改屬性值,它爲我工作得很好:
'/'只是爲了'sed'通常(但不是強制性的)分隔符。如果你嘗試別的東西,會發生什麼,比如pipe('|')? – 2011-12-22 16:45:44
@DanFego工作!我花了很長時間才意識到我的var字符串中的'/'是問題所在。忘了你可以切換sed分隔符。謝謝 – Michael 2011-12-22 16:50:03
爲什麼你根本用「g」修飾符? – fge 2011-12-22 16:51:29