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
Odpowiedzi:
Masz już potrzebne elementy, zwłaszcza grupowanie. Musisz znaleźć:
Następnie zamień na:
Zauważ, że daje to
sed
parametry, które podajesz jako to, co chcesz wytworzyć, podczas gdy sekwencja pomija dwukropek w ciągused
wyszukiwania i dodaje wiodące puste miejsce w ciągused
zastępującym, dając:Aby odtworzyć sekwencję, musisz wyszukać:
Następnie zamień na:
Jednak
sed
zamiany nie będą działać, chyba że zostaną wykonane w odwrotnej kolejności.źródło