On Wed, May 19, 2021 at 07:46:40AM +0200, Arno wrote:
ist das vielleicht ein File mit DOS Linebreaks? Bei mir geht sed -e 's/([0-9])\s*$/\1},/g' file.txt
Wie geht das mit einem beliebigen Zeichen am Ende? Also ohne zu wissen ob es ein Zahl, Buchstabe, Sonderzeichen ist? Einfach allgemein?
Das musst Du genauer spezifizieren. Ich lese das mal so, dass Du das letzte Zeichen /vor/ dem Zeilenende durch etwas anderem ersetzen willst -- ich könnte es falsch gelesen haben.
Dieses Zeichen heisst auf regexpisch ".$" (also "beliebiges Zeichen, dann Zeilenende". Praktisches Beispiel:
tomas@trotzki:~$ cat /tmp/ottos-mops ottos mops trotzt otto: fort mops fort ottos mops hopst fort.
Dann:
tomas@trotzki:~$ sed -e 's/.$/#/' /tmp/ottos-mops ottos mops trotz# otto: fort mops for# ottos mops hopst fort#
(die letzte Zeile ist ein Beispiel für Sonderzeichen).
Ein gutes mentales Modell ist, Du stellst Dir vor (nehmen wir die erste Zeile oben) die regexp-Maschine nimmt sich die erste Anweisung (der Punkt) und die aktuelle Position (am Anfang, also "o".
* Erste Position: "o" - Punkt passt auf alles, also auf "o" - nächste Anweisung: Zeilenende? Nein. Pech. mit der nächsten Position weitermachen * Zweite Position: "t" - Punkt passt auf alles, also auf "t" - nächste Anweisung: Zeilenende? Nein. Pech. mit der nächsten Position weitermachen ... [ziemlich langweilige Angelegenheit; wir erreichen das letzte "t"] * Letzte Position: "t" (letztes von "trotzt") - Punkt past... blabla. - nächste Anweisung: Zeilenende? Ja. WAS HAST DU GESAGT? Jaaa! Treffer.
Wie das in Wirklichkeit gemacht wird ist natürlich noch "interessanter". Aber mit so einem mentalen Modell kannst Du den regulären Ausdrücken viel Spass abgewinnen.
lg -- t