2017-09-25 16 views
0

Ich versuche, diesen Block nach meiner ersten Zeile in einer Datei hinzuzufügen:Kann Zeile mit Sed nicht hinzufügen?

sed -i '1a\ 
apply plugin: 'io.fabric' \ 
repositories { \ 
    maven { \ 
    url 'https://maven.fabric.io/public' \ 
    } \ 
}' test.txt; 

Aber laufen interminal ich Fehler:

sed: -er Ausdruck # 1, char 108: unerwartete `}‘

+0

Abgesehen von der Verwendung von einfachen Anführungszeichen in einfachen Anführungszeichen können andere Probleme auftreten .. Ich würde vorschlagen, die Zeilen, die Sie hinzufügen möchten, in eine Datei einzufügen und 'sed '1r lines.txt' test.txt zu verwenden 'Das wäre eine robuste Lösung für alle Fälle ... – Sundeep

+2

Entfernen Sie das Leerzeichen hinter dem letzten Backslash sollte das Problem beheben. – CWLiu

Antwort

1

Zwei Dinge,

  • Sie sind mit einfachen Anführungszeichen innerhalb einzelner quo tes, wird es unerwünschte Ergebnisse haben. Verwenden Sie doppelte Anführungszeichen oder geben Sie einfache Anführungszeichen in die Zeichenfolge ein.

  • Nichts sollte die \ am Ende der Zeilen folgen.

Wir etwas schreiben könnte wie,

sed "1a \\ 
apply plugin: 'io.fabric' \\ 
repositories { \\ 
    maven { \\ 
    url 'https://maven.fabric.io/public' \\ 
    } \\ 
}" input 

Hinweis Hier \\ erforderlich ist, wie wir doppelte Anführungszeichen verwenden.

+0

es arbeitet mit -i. –

+0

@ User101 Ich habe '-i' weggelassen, nur um eine versehentliche Bearbeitung der Eingabedatei zu verhindern. – nu11p01n73R

+0

's/einschließlich einzelner Anführungszeichen in einfachen Anführungszeichen, wird es unerwünschte Ergebnisse haben/Sie können keine einfachen Anführungszeichen in einfache Anführungszeichen /' und 's/oder einfache Anführungszeichen setzen/oder mit einem schließenden einfachen Anführungszeichen dann aus dem Skript zurückspringen Geben Sie ein einzelnes Anführungszeichen in der Shell ein und geben Sie das Skript dann erneut mit einem öffnenden einfachen Anführungszeichen/'ein. ''foo' '' bar'', von dem ich annehme, dass Sie daran gedacht haben, entgeht nicht dem Zitat im Skript, das das Skript verlässt, und liefert ein geflutetes einfaches Zitat in der Shell und gibt dann das Skript erneut ein. –

Verwandte Themen