2017-08-31 107 views
-1

我想使用bash命令查找並替換多個文件中的字符串。我正在使用sed,這是我不熟悉的。使用sed替換多個文件中的字符串

我的變量:

$FILE = (/home/user/file1.txt, /home/user/file2.txt) 
$REL = 5.0 

我的代碼:

for f in ${FILES[@]}; do sed -i "$f" "s/__ver__ =*/__ver__=$REL/g"; 

輸出:

sed: -e expression #1, char 2: unknown command: `/' 
sed: -e expression #1, char 2: unknown command: `/' 

什麼是錯我的表情?

+0

可能在文件中出現多次'__ver__ ='? – RomanPerekhrest

+0

@RomanPerekhrest不,只有一個。 – diegus

+0

您嘗試分配'FILE'(但失敗,因爲'$'不應該在那裏),但是您嘗試使用'FILES'。其實,你也不應該爲你的私有變量使用大寫字母。事實上,我認爲沒有很好的理由將文件名放在變量中。同樣,你想'REL = 5.0'沒有美元符號,等號周圍沒有空格。 – tripleee

回答

0

1)文件名應該被指定作爲最後一個參數爲SED表達:

2)bash的for環應與done關鍵字結束

for f in ${FILES[@]}; do sed -i "s/__ver__ =*/__ver__=$REL/" "$f"; done 

如果您的文件具有相似的命名格式,您可以避免for loop:

sed -i 's/__ver__ =*/__ver__=$REL/' /home/user/file[2].txt 
+1

......或者如果OP真的堅持把文件放入變量中,則可以從''$ {FILES [@]}「選擇'sed -i's/from/to /'。 – tripleee

+0

'= *'實際上應該是'= *'。 – Kusalananda