Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeile am Anfang einer Datei einfügen

35 views
Skip to first unread message

Christian Garbs [Master Mitch]

unread,
Feb 11, 2003, 5:25:14 PM2/11/03
to
Mahlzeit!

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!

Maik Zumstrull

unread,
Feb 12, 2003, 8:23:19 AM2/12/03
to
Christian Garbs [Master Mitch] wrote:
> Mahlzeit!
>
> 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?

"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

Hauke Laging

unread,
Feb 12, 2003, 2:10:40 PM2/12/03
to
Maik Zumstrull schrieb am Mittwoch, 12. Februar 2003 14:23:

[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

Maik Zumstrull

unread,
Feb 13, 2003, 10:50:18 AM2/13/03
to
Hauke Laging wrote:
> Maik Zumstrull schrieb am Mittwoch, 12. Februar 2003 14:23:
>
> [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.

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

0 new messages