• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

text in Textdatei ersetzen ??

Fantajoe

Newbie
Hallo zusammen,

Ich möchte in einer Textdatei nach einem bestimmten Text suchen, und dann in der Zeile das vorhandene Datum ändern.

Beispiel:
Code:
text text text text ......
^ Datum              ^     job     ^  Beschreibung     ^
| 01.01.2014:13:30   |  suchjob    | sucht nach etwas  |
| 05.01.2014:14:30   |  msuchjob   | sucht nach mehr   |
| 03.01.2014:13:20   |  nixjob     | sucht nix         |

Nun möchte ich in der Textdatei die Zeile mit "msuchjob" suchen und das Datum davor durch ein anderes Datum z.B. 22.01.2014:15:00 ersetzen.

Ich bin hier ein bisschen planlos, kann mir jemand helfen ??
 

abgdf

Guru
Meist löst man sowas (neben sed) in einer Skriptsprache. Da gibt es mehrere, z.B. awk, Perl oder Python.
Wenn Deine Textdatei etwa "text.txt" heißt und das Datum immer in diesem Format ist und wie in Deinem Beispiel in den Spalten 3 bis 18 steht, kann man mit Perl auf der Konsole z.B. Folgendes machen:
Code:
perl -pe 'if(/msuchjob/){substr($_,2,16,"22.01.2014:15:00")}' -i text.txt
Um sowas zu schreiben, sollte man aber besser Perl von Grund auf lernen. Mir persönlich hat das Spaß gemacht.
 
OP
F

Fantajoe

Newbie
abgdf, erst mal danke für deine schnelle Antwort.

Das Datum ist immer im selben Format, allerdings steht es nicht immer in der selben Zeile.

Ich hab mir schon überleg, die Zeile mit awk raus zu filtern um dann das Datum mit sed überschreiben, nur fehlt mir irgend wie der Ansatz.
 

Faxxon

Member
Code:
awk -F '|' '{ if ($3 ~ "msuchjob") {$2=" 22.01.2014:15:00   "; OFS="|"; print} else {print}}' Textdatei.txt

Algorithmus: Feldtrenner ist das |. Ist im 3. Feld "msuchjob" enthalten, dann ersetze Feld 2 (das Datum mitsamt Leerzeichen) und drucke die Zeile aus. Drucke alle anderen Zeilen ungeändert aus.
 
Code:
sed -n '/msuchjob/s/[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{4\}:[0-9]\{2\}:[0-9]\{2\}/HierDatumImGleichenFormat/p' < DATEI
könnte gehen, ich habe den RegEx nicht getestet.
Das Ganze geht Zeile für Zeile die Datei DATEI durch und sucht nach solchen die "msuchjob" enthalten und ersetzt dann in diesen Zeilen "zwei Ziffern gefolgt von einem Punkt zwei Ziffern einem Punkt vier Ziffern Doppelpunkt zwei Ziffern Doppelpunkt zwei Ziffern" durch "HierDatumImGleichenFormat" und druckt dann die geänderten Zeilen aus (auf die Standardausgabe also deine Konsole).

Wenn das Ergebnis deinen Erwartungen entspricht, können wir die Ersetzung direkt in der Datei vor nehmen. Dazu solltest Du aber erst einmal ausführlich testen!
 
OP
F

Fantajoe

Newbie
Hallo Faxxon,
hallo Geier0815,

Danke für euer Antwort.

Beides funktioniert super.

Wenn ich die Lösung lese, ist sie mir voll verständlich und logisch........ nur selber komme ich da nicht drauf.

Danke auf jeden Fall
 
Oben