sed Zeile am Ende einer Datei einfügen geht nicht?
Es klingt nach einem Witz, aber ich bekomm es einfach nicht hin. Ich möchte unter openSUSE Tumbleweed mit sed eine Zeile einer Datei hinzufügen, zB:
sudo sed -i „vm.swappiness=10“ /etc/sysctl.conf
Das spuckt allerdings die Fehlermeldung aus:
sed: -e Ausdruck #1, Zeichen 16: Neuere Version von sed erwartet
Die Version von sed ist 4.8
Wenn ich das mit einer anderen Datei (zB /home/richard/Test) versuche
sed -i „Test“ /home/richard/Test
kommt
sed: Zielmarke für den Sprung zu >>est<< kann nicht gefunden werden
Wie füge ich mich sed richtig eine Zeile Text am Ende einer Datei hinzu? Überall ist es beschrieben mit: sed -i „Textzeile“ datei
Vielen Dank!
3 Antworten
Ich weiß zwar niht, was Deine Fehlermeldungen bedeuten (und warum Dein sed Deutsch spricht), aber ich kann Dir zumindest sagen, wie man mit sed eine Zeile anhängt.
Sed versteht Befehle, die entweder in einem Script oder mit -e auf der Command Line stehen. Diese Befehle haben meist kryptische Syntax; sie enthalten einen Bereich, eine Tätigkeit und die herumzujonglierenen Textfragmente. In Deinem Fall ist der Bereich $ (Fileende), die Operation ist a (append), und dann kommt das Zeug, das Du rangehängt haben willst.
sed -i -e '$avm.swappiness=10' /etc/sysctl.conf
sollte also die Zeile vm.swappiness=10 an das Ende von /etc/sysctl.conf anhängen. Die Option -i sagt dabei, daß das alte File überschrieben werden soll.
Es ist aber wesentlich vernünftiger, wenn Du em Rat von stdio folgst und echo nimmst. Denn sed ist ein Universaltool ohne Netz; es kann sehr viel schiefgehen, wenn man sich mit der kryptischen Syntax und Arbeitsweise von sed nicht auskennt. Falsch gebaute Befehle können, wenn mach Pech hat, irgendetwas anderes bedeuten und überraschende Wirkung entfalten. Mit echo kann man dagegen kaum Unfug anstellen, und daher ist es das Tool der Wahl, wenn man an Systemfiles herumpfuscht.
-i bedeutet erstmal nur, daß sed inplace arbeitet.
Vergiss sed in diesem Zusammenhang und machs einfach so:
echo "vm.swappiness=10" >>/etc/sysctl.conf