Zeilen ersetzen

B

BrynFury

Grünschnabel
hi...

wie kann ich zum beispiel die vorletzte zeile in einer datei durch einen string ersetzen !?

ty
 
Mit einem Editor. Zu mehr Antwort taugt deine Frage imho nicht.
 
ich glaub er will mit einer Variable arbeiten
 
Weil wir das ja riechen können :-)
Wir müssen das ahnen, aus seinen Worten deuten.
ich hab hier Tierknochen und Ornamente, die mir sein Problem mitteilen :-D
 
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?!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

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
 
Zuletzt bearbeitet:
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. :think:
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
 

Ähnliche Themen

Rekursives Ersetzen

Verzeichnis mit 1200 Dateien auf Verweise in Textdateien checken

SED: eine Zeile mit einem Grep-Output ersetzen

Zeilen-übergreifend zwischen {....} filtern

perl: Zusammenführen von Zeilen, die mit Leerzeichen beginnen.

Zurück
Oben