2017-08-31 4 views
-1

Ich möchte eine Zeichenfolge in mehreren Dateien mithilfe von Bash-Befehl suchen und ersetzen. Ich verwende sed, mit denen ich nicht wirklich vertraut bin.Ersetzen Sie eine Zeichenfolge in mehreren Dateien mit sed

Meine Variablen:

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

Mein Code:

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

Ausgang:

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

Was mit meinem Ausdruck ist falsch?

+0

könnte es mehrere Vorkommen von '__ver__ =' in einer Datei geben? – RomanPerekhrest

+0

@RomanPerekhrest Nein, nur einer. – diegus

+0

Sie versuchen, 'FILE' zuzuordnen (aber scheitern, weil' '' ''' '' '' '' '' nicht sein sollte), aber dann versuchen Sie' FILES' zu verwenden. Eigentlich sollten Sie auch keine Großbuchstaben für Ihre privaten Variablen verwenden. Tatsächlich sehe ich keinen guten Grund, die Dateinamen in eine Variable zu setzen. Ähnlich wollen Sie 'REL = 5.0' ohne Dollarzeichen und ohne Leerzeichen um die Gleichheitszeichen. – tripleee

Antwort

0

1) Der Dateinamen sollte als letzte Argument spezifiziert werden Sed expression:

2) for Schleife des bash sollte done Schlüsselwort beendet

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

Wenn Ihre Dateien haben ein ähnliches Namensformat, das Sie vermeiden können: for loop:

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

... oder 'sed -i 's/from/to /'" $ {FILES [@]} "' wenn das OP wirklich darauf besteht, die Dateien in einer Variablen zu haben. – tripleee

+0

Es ist wahrscheinlich, dass '= *' eigentlich '= *' sein sollte. – Kusalananda

Verwandte Themen