2017-02-22 1 views
0

Lassen Sie mich mit dem beginnen, was ich versuche zu tun.
Ich habe eine sed-Anweisung, um eine bestimmte Zeile zu finden und dann die Zeile darunter zu ändern. Dazu lösche ich zuerst die darunter liegende Zeile und füge die gewünschte Zeile an.Ausführen von sed durch eine Funktion, die nicht abgeschlossenes Substitutionsmuster liefert

Hier findet der erste Ausdruck eine Zeile mit Ausdruck in $ rootline und löscht dann die nächste Zeile. Und Ausdruck 2 fügt die Zeile hinzu, die ich nach der Zeile mit $ rootline hinzufügen möchte.
Früher hatte ich das in einer separaten .sh-Datei und als ich die Datei mit sudo anrief (mit sudo für eine andere wichtige Operation in der Datei), funktionierte es perfekt.
Jetzt versuche ich es in eine Funktion und rufen Sie es durch die gleiche .sh-Datei. Um die Funktion mit sudo aufzurufen, verwende ich diese answer. Alles scheint in Bezug auf den sudo Teil der Funktion zu funktionieren gut, aber wenn es um den oben genannten sed Betrieb kommt, erhalte ich die folgenden

sed: 1: "/root ALL=/ {N;s/ 
.*//;} 
": unterminated substitute pattern #$rootline='root ALL=' 

Jeden Hinweis auf, warum ich diese Störung erhalten?

HINWEIS: Ich arbeite Mac OS X

Antwort

0

ich den Fehler bekam. Eigentlich ziemlich dumm.
Die Art und Weise, wie ich Sudo für die Funktion verwendete, bestand darin, den Inhalt der Funktion auf eine Datei zu übertragen. Got it from here.
Und wenn es war der folgende Code in die Datei widerhallen.

sed -e '/'"$rootline"'/ {N;s/\n.*//;}' -e '/'"$rootline"'/ a\ 
'"$1 $linetoadd" <tmpmain >tmpsec 

Es wurde selbst ‚\ n‘ als eine neue Zeile zu nehmen und um eine neue Zeile statt „\ n“ Druck und damit die Sed Fehler.

Verwandte Themen