2017-12-20 5 views
0

Tool Datei: Git Bash für Windows"sed" Insert Aufkantung

Problem: Der Versuch, den Text "\ connect zentrale" am Anfang jeder Datei in einem Verzeichnis einzufügen.

-Code:

for f in $DIR/*.sql; do 
    sed -i "1i \\\connect central" $f 
done 

Dies versucht inline zu bearbeiten und meinen Text einfügen, sondern drei Schrägstriche (wie ich überall gelesen habe) nicht die einzige Backslash erstellen, wie ich erwartet habe. Stattdessen erhalte ich:

enter image description here

Ich habe auch versucht, einige Varianten entlang der Linien von:

for f in $DIR/*.sql; do 
    sed -i -e "1i `\\\connect central`" $f 
done 

aber das wirft einen Fehler von sed: -e expression #1, char 3: expected \ after a‘, c', i'`

Antwort

3

Verwenden Sie einfache Anführungszeichen anstelle von Anführungszeichen. Backslash ist ein Escape-Zeichen in doppelten Anführungszeichen, so müssen Sie es verdoppeln es buchstäblich zum sed Befehl durchlaufen. Es hat keine spezielle Bedeutung in Anführungszeichen.

sed -i '1i \\\connect central' "$f" 

es mit doppelten Anführungszeichen zu tun (was Sie brauchen, wenn es in der String-Variable Inhalt ist Sie einfügen), haben Sie alle Schrägstriche zu verdoppeln:

sed -i "1i \\\\\\connect central" "$f" 

Für weitere Informationen, siehe Difference between single and double quotes in Bash

+0

Und weiter zu erläutern, wird der erste Schrägstrich durch den sed 'I' Befehl erforderlich. Der Backslash, der folgt, muss als Backslash-Backslash maskiert werden, damit es von sed nicht speziell behandelt wird. Daher werden von sed drei Backslashes benötigt. – John1024

+0

@ John1024 Das ist bereits in dem Befehl in der Frage inhärent. Er weiß, was der korrekte 'sed'-Befehl ist, er hat nur Schwierigkeiten, ihn aus der Shell zu übermitteln. – Barmar

+0

Ja, konnte einfach nicht die richtige Syntax und offensichtlich, die Zitate warf mich für eine Schleife. Vielen Dank. – Daniel