2017-08-31 6 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いいえ、1つだけです。 – diegus

+0

あなたは 'FILE'を割り当てようとしますが(' $ 'は存在しないので失敗しますが)、' FILES'を使用しようとします。実際には、プライベート変数には大文字も使用しないでください。実際には、最初に変数にファイル名を入れる理由はありません。同様に、 'REL = 5.0'をドル記号なしで、等号のまわりにスペースを入れないようにします。 – tripleee

答えて

0

1)がために最後の引数として指定する必要がありファイル名SEDの式:

doneキーワードで終了すべきである2)はbashのforループ

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

の場合あなたのファイルは避けることができる同様の命名形式を持っていますforループ:

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

...または 'sed -i 's/from/to /'" $ {FILES [@]} "' OPが実際に変数にファイルを持つことを強く要求している場合。 – tripleee

+0

'= *'は実際には '= *'であるはずです。 – Kusalananda

関連する問題