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