Shellscript. Neue Zeile am Anfang einer Log-Datei schreiben

Und ich glaube, Du hast den Satz nach Deiner Liste der Reihenfolge nicht mehr gelesen:
Das heißt, "Redirecting Output" - und somit das Leeren der Ausgabedatei - sollte vor Ausführung des Kommandos kommen.
cat file sollte also ein leeres file bearbeiten - zumindest nach meinem Verständnis.
Wie ich bereits sagte, war das "früher" auch unter Linux standardmäßig so.
doch, nur wird erst die variablenauswertung und die kommandosubstitution gemacht.
sprich:
das "cat datei" erfolgt VOR der Ausgabeumleitung das es sich nunmal um eine kommandosubstitution handelt.
echo "`echo "bar" ; cat test`" > test:
1. echo bar
2. cat test
3. >test
4. echo "1,2" > 3

das war auch früher schon so.

edith:
noch mal etwas ausführlicher:
echo "`echo "bar" ; cat test`" > test:
#cat test
zeile 1
zeile 2

1. echo "bar"+`cat test` > test (erste kommandosubstitution)
2. echo "bar\nzeile1\nzeile2" > test (zweite kommandosubstitution)
3. test neu leer anlegen (umeitung auswerten und datei erzeugen)
4 kommando echo "bar\nzeile1\nzeile2" ausführen
 
Zuletzt bearbeitet:
Ich hatte leider einige Tage keine Zeit, bin der Sache aber jetzt noch einmal nachgegangen.

Ich nehme alles zurück und behaupte das Gegenteil :D.
Irgendetwas habe ich wohl falsch gemacht.

Jedenfalls auch unter Mac OS X:
Code:
bash-3.2$ cat Testdatei
Zeile 1
Zeile 2
Zeile 3
bash-3.2$ echo "$(echo "foo" && cat Testdatei)" > Testdatei
bash-3.2$ cat Testdatei
foo
Zeile 1
Zeile 2
Zeile 3

Gruß
maceis
 
Mann, ihr gebt euch echt viel Mühe mir zu helfen. Vielen Dank auch.
Aber lass mal gut sein. ich scrolle einfach weiter :D
 
ich versuche z. Zt. mit sed Dateien zu ergänzen. Funktioniert soweit wie es Pill schreibt. Da der Text, den ich in eine Datei einfügen will aber etwas umfangreicher und nicht immer der gleiche ist, wollte ich den Text aus einer anderen Datei lesen und an die entsprechende Stelle der Zieldatei schreiben. Frage ist wie? Es gibt ja die Option r bei der man eine Datei aus der gelesen werden soll angeben kann. Und die Zeilen die eingefügt werden sollen, kann man wohl auch angeben. Aber irgendwie fehlt mir da der Plan. Hab schon einiges recherchiert, aber irgendwie passt das alles nicht, vermutlich weil OSX wohl eine etwas älter Variante beinhaltet. Würde mich freuen, wenn mir hier jemand weiterhelfen könnte.
Ich hab gerade festgestellt, dass das von Pill zwar funktioniert, aber leider nur in der ersten Zeile also 1i, 300i geht nicht und a für append geht auch nicht :confused:

Gruß
Killroy
 
Zuletzt bearbeitet:
Was genau möchtest Du denn machen?
 
Hi maceis,
ich möchte mit meinem Skript ab einer bestimmten Zeile in einer Datei, Text aus einer anderen Datei einfügen. Wenn möglich nicht den gesamten Text sonder einige zusammenhängende Zeilen.
als das funktioniert aber nur in Zeile 1
sed -i "" -e "1i\\
das ist neuer Text" "zieldatei.txt"

das nicht weil es bestimmt strunz falsch ist :noplan:
Zieldatei Zeile 301 ab hier sollen 3 Zeilen aus der zweiten Datei eingefügt werden.
sed -i "" -e "301r\\
insert.txt 1 3" "zieldatei.txt"
auch nicht, wenn ich den ganzen Text einsetzen möchte
sed -i "" -e "301r\\
insert.txt" "zieldatei.txt"
insert.xt und zieldatei.txt liegen im gleiche Ordner wie das Script

Hoffe Du kannst mir ein bisschen weiterhelfen

Gruß
Killroy
 
Deine Beschreibung ist sehr unpräzise.
Daraus werde ich nicht schlau.
So etwas geht:

Code:
(sed -n 1,10p infile_1 && sed -n 11,13p infile_2 && sed -n 11,\$p infile_1) > outfile
Das setzt die Zeilen 11 bis 13 aus infile_2 zwischen Zeile 10 und 11 in infile_1 ein und schreibt das Ganze nach outfile.

Wenn ich so etwas öfter bräuchte, würde ich mir ein Perl-Skript basteln.

Gruß
maceis
 
Zuletzt bearbeitet:
Zurück
Oben Unten