Hallo
Was willst du denn nun machen?
hi...
wie kann ich zum beispiel die vorletzte zeile in einer datei durch einen string ersetzen !?
ty
Hier die vorletzte:
naja, ich meinte natürlich mit grep und/oder awk arbeiten...
nur weiß ich nicht, wie ich damit mein problem lösen könnte.
ok die zeile könnte ich mit grep ausfindig machen
Code:
grep "Zeileninhalt" /datei.txt
wie kann ich dann aber diese komplette zeile ersetzen?!
Hier eine Zeile, die auf ein bestimmtes Pattern matcht.
so habe jetzt folgendes:
Code:
zeitzone="\"Europe/Brussels\""
zoneAlt=$(grep ^"TIMEZONE=" clock > test.txt)
sedstr="s/$zoneAlt/$zeitzone/g"
sed -e '$sedstr' clock > test.txt;;
gibt aber den fehler : sed: -e Ausdruck #1, Zeichen 7: unterminated `s' command
Das geht nun gleich garnicht so.
ok der Reihe nach:
Du kannst mit grep nix ändern.
grep ist ehemal aus ed entstanden, wobei es aus der Zeichenfolge für Ausgabe von Zeilen die auf eine Regexp matchen benannt wurde:
Was der Befehl für ed ist, Datei durchsuchen (g) und regexp /re/ Matching print (p).
Ersetzen kann grep also nicht.
Dafür gibt es z.B. sed
Wir ersetzen die vorletzte Zeile durch Neuer Text
Code:
sed -ne ':l N;$!b l;$s/^\(.*\)\n[^\n]*[\n]\([^\n]*\)$/\1\nNeuer Text\n\2/g;p' input_file
Natürlich solltest du erst prüfen, ob es eine Vorletzte Zeile gibt:
Sonst ist nix zu tun.
Code:
if [ $(wc -l test|cut -d" " -f1) -gt 1 ] ;
then
sed -ne ':l N;$!b l;$s/^\(.*\)\n[^\n]*[\n]\([^\n]*\)$/\1\nNeuer Text\n\2/g;p' input_file > Outputfile
else
echo "zu wenig Zeilen"
fi
Wenn du einen festen String suchst, und durch einen festen String ersetzen willst, kann das sed auch allein. Wobei es hier egal ist, wo der Suchstring steht.
Code:
sed -e '/TIMEZONE=/s/^.*$/Mein neuer String/' input >output
Das Konstrukt funktioniert nicht:
Code:
sed -e '$sedstr' clock > test.txt;
sed interpretiert wegen der einfachen ' deine variable nicht.
So wird daraus für sed:
Am Ende der Datei ($)
ersetze (s)
edstr ...
nun fehlt durch was .
Deshalb die Fehlermeldung.
Gruß Wolfgang