2016-07-22 59 views
0

以下works in Javascript作爲搭配:匹配字忽略額外字符同一個詞在sed

[^\$]fileref.* 

然而,在sed正則表達式不匹配任何東西。我想在忽略變量標識符的情況下替換bash文件中的變量引用。前提是我有一個默認的佔位符文件,需要使用sed -i從shell腳本更新。我無法找到爲什麼sed對此表達式有問題的原因。

桑達試驗例:

echo -e 'fileref=old\n./executable $fileref' | sed 's/[^\$]fileref.*/fileref=replaced/g' 

從GNU輸出的sed(Ubuntu或者CENTOS),其中沒有發現匹配:

fileref=old 
./executable $fileref 

希望的輸出:

fileref=replaced 
./executable $fileref 
+0

sed逐行工作,「fileref」之前沒有字符。如果你想匹配一行的開始,使用'^'錨點。順便說一句,你不需要在字符類中轉義'$'。 –

回答

2

「沒有$fileref可以表達這樣的開始搜索$:「字符這不是一個$或沒有字符在所有前fileref

echo -e 'fileref=old\n./executable $fileref' | sed 's/\([^$]\|^\)fileref.*/\1fileref=replaced/g' 

同樣用javascript:

var result = str.replace(/([^$]|^)fileref.*/, '$1fileref=replaced'); 
0
echo -e 'fileref=old\n./executable $fileref' | sed 's/^fileref.*$/fileref=replaced/g' 

給出以下

fileref=replaced 
./executable $fileref 

通過把你說的[^ \ $]在一行