<< August 2006 >>
Sun Mon Tue Wed Thu Fri Sat
 01 02 03 04 05
06 07 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31



  • I mainly blog things related to NetBSD

  • my PGP Key is 0xB3FBAE33

  • my homepage


  • Profile

    Technorati Profile

  • If you want to be updated on this weblog Enter your email here:



    rss feed



    2006.08.01
    vim, RegExes und backreferencing

    Bisher habe ich elaboriertere RegExes nur in Perl eingesetzt, manchmal auch in sed. In vim hingegen eher nur kleinere Sachen.

    Jetzt hatte ich eine Liste der Art:

    Chapter_1.txt
    Chapter_10.txt
    Chapter_11.txt
    Chapter_2.txt
    Chapter_20.txt
    Chapter_3.txt



    Damit das ganze ordentlich sortiert wird, müssen natürlich führende Nullen her.

    Das geht nur mit backreferences, d.h. das was im Suchteil der RE getroffen wird, soll im Ersetzen-Teil wieder eingefügt bzw. verwand werden.

    Um die 1-9 zu treffen, genügt eine RE der Art:
    :s/_[0-9]\./

    Backreferences kann man mit & (für den gesamten Text) bzw. \1 \2 \3 usw. für das erste, zweite, dritte Muster.

    Dazu muss man nun den Suchteil der RE etwas umschreiben, indem man die Bestandteile (_ 0-9 und .) in runden Klammern zusammenfasst. Die Klammern wiederum müssen mit \ escaped werden.

    Die RE sieht dann so aus:


    :%s/\(_\)\([0-9]\)\(\.\)/\10\2\3/gi

    Das rote \(_\) trifft den Unterstrich, der mit der roten \1 wieder eingesetzt wird, das grüne \([0-9]\) trifft die einzelne Ziffer und wird mit der \2 wieder eingesetzt und das blaue \(\.\) bezieht sich auf den ., der ja als Sonderzeichen nocheinmal escaped werden muss. Zwischen der \1 und der \2 steht dann der Text der eingefügt werden soll, hier die 0.

    Posted at 09:35 pm by 0xb3fbae33

     

    Leave a Comment:

    Name


    Homepage (optional)


    Comments




    Previous Entry Home Next Entry