Modifica gcode con vim regex


1

Devo modificare gcode per un modello in particolare, devo sottrarre il numero 87 da tutte le coordinate Z. Ecco un esempio di gcode:

;LAYER:435
G0 F9000 X-38.420 Y-26.887 Z87.300
;TYPE:WALL-INNER
G1 F1800 X-37.709 Y-27.459 E1386.91774
G1 X-37.020 Y-28.062 E1386.94819
G1 X-36.404 Y-28.635 E1386.97618

Dall'esempio precedente c'è Z87.300, che devo modificare in Z0.300 e farlo per l'intera Z. Ho provato il seguente comando in vim:

:%s/Z\(\d\d\)/\="Z".submatch(1)-87/

Ma si comporta male.

Risposte:


1

Vim valuta la tua espressione da sinistra a destra, quindi prima concatena "Z" e la corrispondenza, quindi sottrae 87 dalla stringa (che produce 0). Questo può essere risolto con le parentesi:

:%s/Z\(\d\d\)/\="Z".(submatch(1)-87)/

Per essere più espliciti (e gestire i numeri decimali che iniziano con 0), puoi inserire str2nr(), in questo modo:

:%s/Z\(\d\d\)/\="Z".(str2nr(submatch(1))-87)/

La mia soluzione era% s / Z (\ d \ +) / \ = 'Z'. (Invio (1) -87) / poiché Z può essere più cifre.
alevins,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.