PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Klammer am zeilenende einfügen



Brujah
26-10-2006, 02:22
Ist es möglich mit regular expressions oder ähnlichem einen
Text so zu verändern das Klammern in jeder Zeile am ende angefügt werden
die mit einem fixen string anfangen aber dazwischen variablen Text enthalten.

Also
set_nr(1
set_art(1
Soll nachher
set_nr(1)
set_art(1)
sein.

Romanday
26-10-2006, 07:49
Ist es möglich mit regular expressions oder ähnlichem einen
Text so zu verändern das Klammern in jeder Zeile am ende angefügt werden
die mit einem fixen string anfangen aber dazwischen variablen Text enthalten.



awk -v p=$p '{print $0"("p")"}'

michael.sprick
26-10-2006, 09:21
Wenn ich das richtig verstanden habe, will er nur schließende Klammern anfügen, wenn die Zeile mit einem bestimmten String beginnt...

im vi ginge zum Beispiel so, für alle Zeilen, die mit set_ beginnen:

Befehlsmodus -> :%s/^\(set_.*\)$/\1)/g

Brujah
26-10-2006, 10:39
Genau. Ich möchte nur eine schliessende Klammer am Ende der meisten einfügen. Eben solche die ein set_ enthalten.

Aber wenn ich "%s/^\(set_.*\)$/\1)/g" im vi eingebe sagt er mir:
Pattern not found: ^\(set_.*\)$

Das set_ steht leider nicht am Zeilenanfang:



case :
set_name("Giant Rat"
set_nr(1
set_art(1
set_lifepoints(3
set_attack(1
set_defence(0
set_strength(1
set_ruestung(0
set_spellpower(0
set_spell(0
set_range(0
set_minlevel(1
set_sound(SOUND_BOAR
set_ability1(MONSTERSKILL_AMBUSH
set_ability2(MONSTERSKILL_BACKUP
set_ability3(MONSTERSKILL_FEAR
set_ability4(MONSTERSKILL_SLEEPS
set_ability5(ME_RATTE
break;

michael.sprick
26-10-2006, 14:17
hi,

dann ändere doch den Regexp mal so ab:



%s/\(set_.*\)$/\1)/g


Das ^ stand für den Zeilenanfang - der spielt nun keine Rolle mehr....

Romanday
26-10-2006, 16:58
Geht u. a. auch ohne REGEX. :D

awk -v p=$p '{print $0p")"}'

michael.sprick
26-10-2006, 23:43
aber das fügt doch an JEDEM Zeilenende eine schließende Klammer an... es geht ja um bestimmte Zeilen.

Brujah
27-10-2006, 02:37
Das hat schonmal geholfen.
Der jetzt funktioniert hat sah letztendlich so aus:


sed 's/\(^.*set.*\)$/\1\;/' monster.cpp > monster2.cpp

Romanday
27-10-2006, 06:07
aber das fügt doch an JEDEM Zeilenende eine schließende Klammer an... es geht ja um bestimmte Zeilen.

Stimmt,
ich hatte seine anfängliche Frage anders verstanden.
Wieso dort immer eine ) fehlt ist mir ein Rätsel???

Brujah
27-10-2006, 11:28
Ich übersetze gerade unseren alten Purebasic Code nach C++.
Den Rest der Struktur konnte ich schon mit anderen Search-Replaces ersetzen. Nur das Klammer anfügen am Ende ging nicht.
Aber mit diesem Befehl lassen sich jetzt auch viele der anderen Strukturen leichter umsetzen.
Wenn wir es bis Mitte Januar schaffen das Spiel vollständig umzusetzen kommen wir in den nächsten Ubuntu Release. Und das ist eigentlich das Ziel :-)

Joghurt
04-11-2006, 10:10
Was spricht denn gegen
sed -i -e '/set_.*(/{s/$/)/}' DATEI?