2017-02-13 2 views
0

Ich versuche, sed zu verwenden, um eine bestimmte Zeile in einer Konfigurationsdatei zu ersetzen:Sed: Wie fügt man ein Muster ein, das einzelne Ticks enthält?

Das Muster für die I ersetzen möge Linie:

ALLOWED_HOSTS.* 

Der Text I eingefügt werden soll:

'$PublicIP' (Including the single ticks) 

Aber wenn ich den Befehl:

sed 's/ALLOWED_HOSTS.*/ALLOWED_HOSTS = ['$PublicIP']/g' /root/project/django/mysite/mysite/settings.py 

Die Linie wird folgendermaßen geändert:

ALLOWED_HOSTS = [1.1.1.1] 

statt:

ALLOWED_HOSTS = ['1.1.1.1'] 

Wie soll ich den Befehl bearbeiten als auch die einzelnen Ticks enthalten?

+0

Verwendung '\ x27' einfache Anführungszeichen zu repräsentieren ... – Sundeep

+1

Pos sible duplicate of [Wie kann man einem einfachen Zitat in sed entkommen?] (http://stackoverflow.com/questions/24509214/how-to-escape-single-quote-in-sed) – Sundeep

Antwort

1

Sie könnten versuchen, die einzelnen Ticks zu entkommen, oder besser können Sie die Variable, einschließlich der einfachen Ticks zuweisen:

PublicIP="'$PublicIP'". 

Durch die Art und Weise diese var ohne redifining auch sed, ok in meinem Fall funktioniert:

$ a="3.3.3.3" 
$ echo "ALLOWED_HOSTS = [2.2.2.2]" |sed 's/2.2.2.2/'"'$a'"'/g' 
ALLOWED_HOSTS = ['3.3.3.3'] 

Auch das funktioniert ok:

$ echo "ALLOWED_HOSTS = [2.2.2.2]" |sed "s/2.2.2.2/'$a'/g" 
ALLOWED_HOSTS = ['3.3.3.3'] 
+0

@Itai Ganot Aktualisiert. –

Verwandte Themen