Ich möchte am Anfang einer Datei eine Zeile einfügen. Derzeit mache
ich das mit ed:
ed << EOF
e $DATEI
1i
$ZEILE
.
w
q
EOF
Geht das optimaler/schneller/einfacher oder ist ed bereits eine recht
vernünftige Lösung?
Eine Variante wäre
echo $ZEILE > tmp
cat $DATEI >> tmp
mv tmp $DATEI
, aber die bearbeitenden Dateien können zig MB groß sein, da ist es
wohl nicht sinnvoll, extra eine temporäre Datei anzulegen.
Das ganze läuft auf einer AIX-Maschine und wird derzeit aus einem
Perl-Skript mit open(ED, '|ed'); aufgerufen. Perl selber will ich für
die Aktion nicht nehmen, da ich laut $(perldoc -q insert line) um
temporäre Dateien nicht herumkomme.
Gruß,
Christian
--
....Christian.Garbs.....................................http://www.cgarbs.de
Kein Denkverbot fuer niemanden!
"sed" kann das auch.
Befehl:
sed '1i\
Meine-Zeile' Dateiname.txt
Hinweis: Der Zeilenumbrauch dabei ist erwünscht und nötig. Der ist an
dieser Stelle Teil des sed-Befehls. Bash ignoriert den Umbruch, da das
ganze zwischen ' ' steht.
Ausgabe des Krams erfolgt auf stdout, kann also entweder gepiped oder
redirected werden.
In wiefern das Ganze so schneller ist, weiß ich nicht. Kürzer ist es
wohl als Befehl.
Maik Zumstrull
[sed]
> Ausgabe des Krams erfolgt auf stdout, kann also entweder gepiped
> oder redirected werden.
Kann es eben nicht, jedenfalls nicht im Sinne des OP, der ja
temporäre Dateien vermeiden wollte. Die Umleitung auf dieselbe Datei
führt unmittelbar ins Unglück.
CU
Hauke
--
Die Ein-Mann-Unix-Entwicklungsabteilung: http://cr.yp.to
begin LOVE-LETTER-FOR-YOU.txt.vbs end
Gegen Schrottsoftware. Gegen Luser (man lart).
http://piology.org/ILOVEYOU-Signature-FAQ.html
Stimmt, in die gleiche Datei reinpipen geht natürlich nicht (hatte ich
so auch nicht gemeint).
Ich würde das in einem Script wohl so erledigen, dass ich die
Ursprungsdatei umbenenne, in den Originalnamen das sed redirecte und
dann die andere lösche. Die Ed-Lösung spart dem gegenüber etwas
Festplattenplatz, sofern man mal unterstellt, dass sie auf Platz sparen
programmiert ist und das nicht intern einfach genauso macht wie die
sed-Lösung.
Maik Zumstrull