Wykonaj wiele wyrażeń regularnych jeden po drugim lub połącz wiele wyrażeń regularnych w jeden

0

Używam notatnika ++, napisałem kilka wyrażeń regularnych, które ułatwiły mi pracę nad formatowaniem pliku. Jednak, aby sformatować plik w żądanym formacie, muszę wykonać wiele wyrażeń regularnych, chciałem wiedzieć, czy istnieje jakiś możliwy sposób, w którym będę przechowywać moją listę wyrażeń regularnych i będzie ona wykonywana jedna po drugiej.

Oto plik tree.txt, który należy sformatować.

overview/Main_Overview/Gas Management/BOG MV/BOG MV Process Alarms:Tag=BOG Heaters Process Alarms:Device=:Color=-3355444
overview/Main_Overview/Gas Management/BOG MV/BOG MV Process Trip:Tag=BOG Heaters Process Alarms-1:Device=:Color=-3355444
overview/Main_Overview/Gas Management/BOG MV/BOG MV External Trip:Tag=BOG Heaters Process Alarms-1-1:Device=:Color=-3355444

Wyrażenie regularne zostanie obcięte nad tekstem i ustawione w tym formacie sed.

s/BOG Heaters Process Alarms:/BOG MV Process Alarms:/g
s/BOG Heaters Process Alarms-1:/BOG MV Process Trip:/g
s/BOG Heaters Process Alarms-1-1:/BOG MV External Trip:/g

Aby osiągnąć powyższy wynik, wykonam kilka operacji wyrażenia regularnego jedna po drugiej.

Find- .*/
Replace- 

Find- Device=:.*
Replace- 

Find- :Tag=
Replace- /

Find- (^.*/)([^/]+):
Replace- /\2/ \1

Find- ^
Replace- s

Find- $
Replace- g

Po powyższym wyrażeniu regularnym otrzymuję żądany format, ale muszę wiedzieć, czy można go połączyć, aby nie trzeba było wykonywać ręcznie po zakończeniu każdego wyrażenia lub zredukować do jednego wyrażenia. Dzięki

gadhvi
źródło

Odpowiedzi:

0

Masz już potrzebne elementy, zwłaszcza grupowanie. Musisz znaleźć:

^.*/(.*:)Tag=(.*:)Device=.*$

Następnie zamień na:

s/\2/\1/g

Zauważ, że daje to sedparametry, które podajesz jako to, co chcesz wytworzyć, podczas gdy sekwencja pomija dwukropek w ciągu sedwyszukiwania i dodaje wiodące puste miejsce w ciągu sedzastępującym, dając:

s/BOG Heaters Process Alarms/ BOG MV Process Alarms:/g
s/BOG Heaters Process Alarms-1/ BOG MV Process Trip:/g
s/BOG Heaters Process Alarms-1-1/ BOG MV External Trip:/g

Aby odtworzyć sekwencję, musisz wyszukać:

^.*/(.*):Tag=(.*:)Device=.*$

Następnie zamień na:

s/\2/ \1/g

Jednak sedzamiany nie będą działać, chyba że zostaną wykonane w odwrotnej kolejności.

AFH
źródło
Dzięki, że zadziałało, nie wiedziałem, że możemy grupować w ten sposób.
gadhvi