Felder in einer Datei via VIM befüllen?

N

Nopsi

Grünschnabel
Ich habe eine Datei, paar tausend Zeilen groß, welche wie folgt aussieht:

Code:
18|2007|V|0|Nachname|Vorname||Herrn||||GEBDATUM||XXX|121||15|Sd|||4|||||18|2007|V|1|16.01.2007|02|XX|XX||Herrn||||||XX|35||XX|XX|||4||||

Ich möchte nun diese Datei global editieren. ich habe die datei mit VIM offen und möchte nun die felder nr. 15-30 (beispielhaft jetzt) mit den Werten XXXYYYZZZ füllen.

Wie geht das nochmal im VIM / VI ?

mir fällt der befehl nicht mehr ein :(

Ich muss ja definieren was der Feldtrenner ist (| = Pipe) und dann sagen: Fülle die Felder 15 bis 30 mit dem wert XXXYYYZZZ
 
Hallo

Befehlsmodus.
Dort mit replace auf ganze Datei.
Code:
:1,$s/REGEXP/REPLACE/g
Der Befehl ist aber identisch mit dem sed- Befehl, deshalb kannst du gleich sed nehmen.
Das dürfte auch schneller gehen, da die Datei nicht erst komplett geladen werden muss.

Mit sed sähe das so ähnlich aus, habe hier nur 5 Felder ersetzt.
Code:
$ sed -e 's/\(\([^|]*|\)\{15\}\)\(\([^|]*|\)\{5\}\)\(.*\)$/\1neu1|neu2|neu3|neu4|neu5|\5/g' test
das|ist|ein|test|feld|mit|einigen|feldern|||||13|14|15|neu1|neu2|neu3|neu4|neu5|21|22|23|24|25|26|27|28|29|30|31|32|33
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|neu1|neu2|neu3|neu4|neu5|21|22|23|24|25|26|27|28|29|30|31|32|33

Musst du dir halt auf deine 15 Felder anpassen.

Aber mit perl oder awk geht das leichter, da diese Spaltenorientiert arbeiten können.

Gruß Wolfgang
 
Da ich auf einem Win PC arbeiten muss steht mir leider kein Unix/Linux zur verfügung hier im geschäft.

d.h. ich habe nur VIM und kann daher kein SED verwenden...

Tip wie der Befehl im VIM aussehen müsste?
 
Da ich auf einem Win PC arbeiten muss steht mir leider kein Unix/Linux zur verfügung hier im geschäft.

d.h. ich habe nur VIM und kann daher kein SED verwenden...

Tip wie der Befehl im VIM aussehen müsste?

Sorry, aber wir sind hier in einem UNIX-BOARD.

Aber du hast das gelesen?
Der Befehl ist aber identisch mit dem sed- Befehl, deshalb kannst du gleich sed nehmen.

Ob das deine Windowsversion auch so kann, kann ich nicht sagen.
Das selbst zu testen, sei dir überlassen. ;)
Dazu befrage besser eine geeignetere Windows-Community.

Gruß Wolfgang
PS es gibt auch sed für Windows
 
Das dies ein Unix Board ist, ist mir bekannt :D Bei einem Windows Board wird einem nicht geholfen....

Code:
:1,$s/\(\([^|]*|\)\{31\}\)\(\([^|]*|\)\{17\}\)\(.*\)$/\1Nachname|Vorname|Firmenname|Anrede|Rechtsform|Titel|co|GebDatum|GebName|Straße|HausNummer|StrZusatz|PLZ|Ort|Postfach|Ortszusatz|LKZ|TelPriv|TelGesch|TelMob|SterbeDatum\5/g

Hat perfekt funktioniert, danke dir Wolfgang.
 

Ähnliche Themen

Debian Lenny, ATI proprietary, Skystar2, Kaffeine

HD Parameter setzen Suse 10.3, lahmer gehts kaum!

Linuxpartition zerschossen

[openSuse10.2] SATA mal wieder...

Meine Distri spielt verrückt !

Zurück
Oben