PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichen ersetzen (.. ,, !! ??)


luge
10.12.2008, 11:11
Hi Leute,
Haben in der Schule einen Text bekommen, in dem wir Zeichen (.. ,, !! ??) durch (. , ! ?) ersetzen sollen.
Das ganze soll aber in nur einem Befehl geschrieben sein. (UNIX - vim)

Bin ein Anfänger und deswegen mit meinem Wissen schon am Ende!

Es wäre super wenn ihr mir helfen könntet.

mfg

Luge


Firefall
10.12.2008, 11:52
(\.){2}|(,){2}|(\?){2}|(\!){2} ersetzen mit $1.
Habe aber von Vim Syntax keine Ahnung. Aber das dürfte der Ansatz sein.

luge
16.12.2008, 20:40
Mit:

$s/(\.\|\,\|!\|?)\{2}/\1

findet er die Doppelzeichen, ersetzt aber jeweils nur das Erste in einer Zeile!

Das is doch ein Witz!
Da bekommste eine Stunde Vorlesung in der nur nach "aa12bb" und so ein scheiß gesucht wird und dann sollte dir so Ausdrücke selbst erarbeiten!
Kenn einer von euch ein gutes Tutorial, am besten für vim?!

mfg

Luge

kill4h`
16.12.2008, 20:43
http://www.google.de/search?hl=de&q=vim+regex

Firefall
16.12.2008, 21:22
Wozu escapst du die | mit einem \? Die sollen doch gar nicht vorkommen im Text... Und wieso das ! und das ? nicht? Denke zumindest, dass das nicht so sein sollte. Wie gesagt, kenne die genaue vim Syntax nicht. Ist nur son Ansatz, der dir vielleicht weiterhilft.

Alamar
16.12.2008, 23:47
Also als Einstieg in Reguläre Ausdrücke ist vielleicht
"perldoc perlre" wobei das dann natürlich schon mit vielen Erweiterungen kommt. (Lookahead Assertions etc.)

Für vim:
:help regex

Jan Krüger
17.12.2008, 13:52
Wozu escapst du die | mit einem \? Die sollen doch gar nicht vorkommen im Text...
POSIX-Regexps schreibt man so. Eigentlich müsste man da auch die () escapen, damit sie als Operatoren interpretiert werden...

Jan Krüger
17.12.2008, 13:55
Mit:

$s/(\.\|\,\|!\|?)\{2}/\1

findet er die Doppelzeichen, ersetzt aber jeweils nur das Erste in einer Zeile!
Lies doch mal die Dokumentation vom VIM-Befehl "s". Man muss das "g"-Flag angeben, damit alle Vorkommnisse auf jeder Zeile ersetzt werden:

:s/.../.../g

Desweiteren... hast du überprüft, ob der von dir vorgeschlagene Ausdruck wirklich nur doppelte Zeichen ersetzt, oder auch Kombinationen wie "!?"?

luge
18.12.2008, 00:38
ALSO ...

... nach vielem rumprobieren hat sich einiges ergeben ;-)

VIM-Dialekt hat eben einige macken!
Vor Klammern und sonstigen Zeichen muss immer ein \ stehen!
Das ganze sieht dann wie folgt aus:

%s:\(\.\|,\|!\|?\)\{2\}:\1:g

Jan Krüger
19.12.2008, 03:46
Das hat mit Macken nichts zu tun; Vim verwendet halt reguläre Ausdrücke gemäß POSIX-Standard und die sehen nunmal etwas anders aus als das, was man sonst so kennt.

Alamar
19.12.2008, 15:02
http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html
Noch zu POSIX regulären Ausdrücken