sed - Zeilen erweitern

daliman

kennt sich schon aus
Kann man mit sed Zeilen verändern? Append hängt nur am Dateiende oder nach einer bestimmten Zeile etwas an.

Beispiel: Ich möchte in einer Datei nach der Zeile suchen die den String "PATH=" enthält und diese jetzt um eine Pfadangabe ergänzen.
 
Diese Einfachstanwendung von sed hilft mir jeider nicht weiter, denn, vielleicht ging daß aus meiner Frage nicht deutlich hervor, die PATH= Angabe enthält natürlich Pfade die man nicht kennt. D.h. ein Substitute ist so nicht machbar. Ich schreibe ein MiniC-Programm das in ein Array liest, dann kann man machen was man will. Aber folgendermaßen habe ich es doch geschafft: (nicht $PATH sondern Applets2=)

_dbrep=$(egrep Applets2= /home/$USER/.kde/share/config/kickerrc)
sed -e 's\'$_dbrep'\'$_dbrep',ServiceButton_10\' /home/$USER/.kde/share/config/kickerrc > /home/$USER/.kde/share/config/kickerrc$$
cat /opt/dalibox/share/kde/kickerrc >> /home/$USER/.kde/share/config/kickerrc$$
mv /home/$USER/.kde/share/config/kickerrc$$ /home/$USER/.kde/share/config/kickerrc
 
Naja ist doch auch kein Problem... Wenn PATH in einer Zeile steht, dann machste einfach folgendes:
sed -i 's/PATH=.*$/PATH=blub/'

Das ersetzt PATH= und den Rest der Zeile mit PATH=blub!

Wie schaut denn so ein PATH Teil aus?
 
Wie schon gesagt, ich will die PATH-Angabe in einer Datei ergänzen und nicht ersetzen. Das Beispiel ist aber für andere Sachen ganz gut.

Die Angabe ".*$" ist wahrscheinlich ein regulärer Pattern(? Ich müsste mich da erst einlesen). Man müsste jetzt den gefundenen String (PATH=/abc:/xyz) in eine Variable schreiben und diese dann um ":/def" ergänzen. Das habe ich in meiner Lösung so gemacht.

Gibt es eigentlich ein Linuxbefehl a la explode, der den Inhalt einer Variable zwischen definierten Trennern (z.B. :) in ein eindimesionales Array packt?
aus a=abc:cde:efg würde dann a[0]=abc, a[1]=cde etc. werden.

Ich habe im oberen Skript die kickerrc um einen Button in der Taskleiste erweitert. Ich kann baer nur etwas ans Ende hängen. So könnte man Text in eine Zeile einfügen. Das dumme ist nur das man KDE erst restarten muß damit die Änderng wirksam wird. Das gibt es bestimmt auch einen Befehl um die kickerrc neu einzulesen ohne KDE neu zu starten. Oder gibt es für Linux auch etwas um Installationen zusammenzustellen?
 
daliman schrieb:
Wie schon gesagt, ich will die PATH-Angabe in einer Datei ergänzen und nicht ersetzen. Das Beispiel ist aber für andere Sachen ganz gut.
Ach ja stimmt. Sorry. Das ist mir irgendwie engangen.

Die Angabe ".*$" ist wahrscheinlich ein regulärer Pattern(? Ich müsste mich da erst einlesen). Man müsste jetzt den gefundenen String (PATH=/abc:/xyz) in eine Variable schreiben und diese dann um ":/def" ergänzen. Das habe ich in meiner Lösung so gemacht.
.* bedeutet alle Zeichen ohne Newline
$ ist das Ende der Zeile

Du kannst mit Sed aber auch ergänzen, da du auch in Sed Variablen hast. Zum Beispiel, wenn du alles nach PATH ergänzen willst:

sed -i 's|PATH=\(.*\)$|PATH=\1:/def|'

\(...\) packt alles in die Variable 1. Mit \1 kannst du auf diese zugreifen.

Gibt es eigentlich ein Linuxbefehl a la explode, der den Inhalt einer Variable zwischen definierten Trennern (z.B. :) in ein eindimesionales Array packt?
aus a=abc:cde:efg würde dann a[0]=abc, a[1]=cde etc. werden.
Gibts sicher. Ich kanns dir aber nur für Perl sagen.
 
Du kannst mit Sed aber auch ergänzen, da du auch in Sed Variablen hast. Zum Beispiel, wenn du alles nach PATH ergänzen willst:
Da bin ich erstmal sprachlos. Wer etwas weiß, ist eindeutig im Vorteil ...

An eine Perl-Lösung habe ich gar nicht erst gedacht, weil ich gedenkt habe daß es in etwa wie PHP ist. Aber das kann man ja programmieren wie Basic. Also wäre es wahrschenlich gut geeignet. Im Internet findet man ja einiges darüber.

Nochmal zu Punkt eins: Das sieht wesentlich kompakter aus als meine Lösung. Ich werde es mit Sicherheit anwenden. Danke. Wobei es natürlich ein Problem gibt, daß mit sed wahrscheinlich nur in Verbindung mit Scripten gelöst werden kann.

Ich habe an das Ende der $HOME/.kde/share/config/kickerrc Variablen Applets2=....einen neuen Button in der Taskleiste angefügt und an das Dateiende die Beschreibung des Buttons. Es klappt zwar, jedoch ist erstens ein KDE-Neustart erforderlich, Zweitens ist die Taskleist jetzt komplett aus den Fugen geraten. Das liegt sicherlich an der "Positions"-Angabe in der Beschreibung. Wie man die jedoch errechnet habe ich noch nicht rausfinden können. (Deshalb die Frage nach einem Installer.)
 
Oben