2014-02-25 198 views
0

我正在嘗試修改腳本以使其在aix服務器中工作。這些腳本必須替換一個包含模式的行,並使用相同的模式添加更多信息。 按照我剛纔的問題here在Unix中替換行的sed命令

我想更換其中包含模式CASIOPEA_STORE_BDD_PWD行,這裏的代碼,仍然不能正常工作:

sed -i 's/^.*\bCASIOPEA_STORE_BDD_PWD\b.*$/CASIOPEA_STORE_BDD_PWD='MyCasioPass2014#'/g' casiopeia.conf 

現在我試圖在OS X上的腳本和該命令拋出我下面的錯誤消息:

sed: 1: "File's route ...": invalid command code m 

Q2:是否有可能加入這一行的文件casiopeia.conf如果它不存在於文件中?

+0

爲什麼你有'MyCasioPass2014'?你真的想用單引號來包圍那段文字嗎?如果是這樣,請嘗試'sed「s /.....\$/'...'/ g」....'祝你好運。 – shellter

+0

'\ b'字錨可能不能移動。你可以試試'\ ' –

+1

我也認爲-i選項是sed命令的GNU擴展,並且不適用於AIX。 – Timmah

回答

0

我不認爲就地編輯(-i)在AIX SED作品的標誌:

你可以嘗試:

sed "s/^.*\bCASIOPEA_STORE_BDD_PWD\b.*$/CASIOPEA_STORE_BDD_PWD=\'MyCasioPass2014\'/g" casiopeia.conf >casiopeia.edit 

或安裝sed的AIX上

GNU版本

對於Q2:

#!/bin/ksh 

search="CASIOPEA_STORE_BDD_PWD" 
replace="CASIOPEA_STORE_BDD_PWD=\'MyCasioPass2014\'" 
filename="$1" 

#Grep for search pattern 
grep q "$search" "$filename" 
if [ $? -ne -0 ]; then 
    #Match not found, append line 
    echo "$search" >> "$filename" 
else 
    #Match found, create tmp file for inplace editing 
    tmpfile=$(mktemp "/tmp/$filename.XXXXX") 
    #Copy orignal to tmpfile 
    cat $filename >$tmpfile 
    #Sed line non-case sensitive 
    sed "s/^.*$search.*$/$replace/g" "$tmpfile" >"$filename" 
    #Remove temp file 
    rm "$tmpfile" 
fi  
+0

我試過了你的命令,但是我沒有在目標文件中做任何修改。但在執行時拋出錯誤。我嘗試刪除b的分隔符或改變「圍繞單一quoutes的選項,但也不起作用。是否有任何選項不僅可以替換標記爲\ b的單詞並替換所有包含該模式的行? –

+0

我不'不幸的是,它可以訪問AIX框,但也可能是** i **(不區分大小寫)是一個GNU sed標誌。您可以嘗試使用'sed「s /^.*$搜索。* $/$ replace/g「」$ tmpfile「>」$ filename「' – Timmah