2017-02-10 2 views
-1

Ich habe eine Variable mit einer Reihe von Daten.Wie ersetze ich Text mithilfe einer Variablen in einem Shell-Skript

Was ich tun möchte, ist ersetzen die] Zeichen in Datei mit Text. Ich habe versucht, sed zu verwenden, aber ich bekomme immer seltsame Fehler.

Ausgabe sollte:

//iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf 
+0

Welche Shell verwenden Sie? Sehen Sie, ob es Raum erlaubt um '=' für variable Zuweisung verwendet zu werden ... und fügen Sie den sed Befehl hinzu, den Sie versuchten ... – Sundeep

Antwort

0

einfach den ] Charakter mit einem \ in regex entkommen müssen:

text="ABCDEFGHIJK" 
sed "s/\(.*\)\]\(.*\)/\1$text\2/" file > file.changed 

oder für in-Place-Bearbeitung:

sed -i "s/\(.*\)\]\(.*\)/\1$text\2/" file 

Test:

sed "s/\(.*\)\]\(.*\)/\1$text\2/" <<< "iiuhdsfiuhdsihf]sdiuhdfoidsoijsf" 

# output => iiuhdsfiuhdsihfABCDEFGHIJKsdiuhdfoidsoijsf 
+0

Funktioniert nicht in der mac Shell – KingKongFrog

+0

Was ist der Fehler, den Sie bekommen? Bist du mit der Option '-i' gelaufen oder nicht? Ich denke, dass die Mac-Version ein Argument für "-i" benötigt. Also, können Sie versuchen "-i". – codeforester

+0

Sie können versuchen, die Ausdrücke für die Rückreferenzen explizit zu verankern, z. 'sed" s/^ \ (. * \) \] \ (. * $ \)/\ 1 $ text \ 2/"' –

0

Es gibt immer die bash Weise, die in Ihrem osx funktionieren sollen:

filevar=$(cat file) 
echo "${filevar/]/$text}" #to replace first occurence 
OR 
echo "${filevar//]/$text}" #to replace all occurences 

In meinem bash ] ich habe nicht einmal zu entkommen.

Übrigens funktioniert die einfache sed nicht?

$ a="AA" 
$ echo "garbage.txt //iiuhdsfiuhdsihf]sdiuhdfoidsoijsf" |sed "s/]/$a/g" 
garbage.txt //iiuhdsfiuhdsihfAAsdiuhdfoidsoijsf 
Verwandte Themen