sed: Wie kann man die variable Zeile ersetzen, wenn sie gefunden wird, oder an das Ende der Datei anhängen, wenn sie nicht gefunden wird?
Meine Frage basiert also weitgehend auf einer verwandten Frage, hat aber einen wesentlichen Unterschied.
In der Antwort von:
sed '/^FOOBAR=/;$;x}' infile
Ich habe eine Variation gemacht, die FOOBAR zu einer Variablen macht (z. B. den Namen eines Programms und dann eine for-Schleife, um eine Liste von Programmen und deren Installationsstatus zu erstellen). Dies ist für ein ziemlich engagiertes Projekt, an dem ich gerade arbeite, um die Installation von Drawile for Raspberry Pi mit einigen neuen Funktionen zu vereinfachen, aber das ist eine andere Art von Würmern, auf die ich mich nicht werde.
sed -i '/^'"$FOOBAR"'=/;$;x}' infile
Ich möchte, dass newvalue eine $ -Variable ist, die sich im Skript ändern kann. Ich kann einfach nicht herausfinden, wie ich das schaffen kann, einfach mit "und" nicht richtig machen. Ich habe stundenlang gesucht und versucht, Tutorials zu lesen, aber ich verstehe nicht genug und bin sehr tief getaucht In die inneren Funktionen von sed. Meistens wird diese Variable etwas einfaches sein wie: Ja, Nein oder Fehler, aber ich könnte sie auch verwenden, um Ordner- und Dateipfade darzustellen ... also mache ich mir Sorgen um / Substitutionen auch hier: Auch wenn es keine vollständige Antwort ist, bin ich froh, es selbst herauszufinden, solange ich in die Richtung weisen kann, in die ich gehen muss, um das besser zu verstehen.
Edit: Es gibt nicht viel zu posten, da es etwas Grundsätzliches gibt, das ich sicher vermisse. Ich habe gerade versucht, Anführungszeichen um newvalue zu setzen. Wie folgt ...
sed -i '/^FOOBAR=/;$;x}' infile
Ausgabe: FOOBAR = $ newvalue Dies ist falsch. Sollte den gespeicherten Wert für newvalue ausgeben!
sed -i '/^FOOBAR=/;$;x}' infile
Ausgabe: FOOBAR = "$ newvalue" Dies ist falsch. Sollte den gespeicherten Wert für newvalue ausgeben!
sed -i '/^FOOBAR=/;$;x}' infile
Ausgabe: sed: -e Ausdruck # 1, Zeichen 30: unbekannte Option für `s '
Wenn newvalue gleich Yes ist, möchte ich, dass die Ausgabe "FOOBAR = Yes" oder möglicherweise ein Ordnerpfad ist.
Edit 2: Es kann wirklich alles sein, vorausgesetzt, es funktioniert einfach. Ich bin nicht besonders damit einverstanden, aber ich habe wahrscheinlich die meiste Erfahrung mit sed.
Edit 3: Die Antwort gefunden.
sed -i '\!^'"$FOOBAR"'=!;$;x}' /home/pi/Public/test.txt
0 Antworten auf die Frage
Verwandte Probleme
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
2
ThunderBird / Lichtsynchronisation mit SE k770i
-
4
Linux-Dateisystem
-
6
Vollbild-Flash langsam in KDE 4