Я использую notepad++, я написал несколько регулярных выражений, которые облегчили мою работу по форматированию файла. Однако, чтобы отформатировать файл в желаемом формате, я должен выполнить несколько регулярных выражений, я хотел знать, есть ли какой-нибудь возможный способ, где я буду хранить мой список регулярных выражений, и он будет выполняться один за другим.

Вот файл tree.txt, который нужно отформатировать.

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

Регулярное выражение обрезает текст выше и упорядочивает его в формате 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

Чтобы достичь вышеуказанного результата, я буду выполнять некоторые операции регулярного выражения один за другим.

Find- .*/
Replace- 

Find- Device=:.*
Replace- 

Find- :Tag=
Replace- /

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

Find- ^
Replace- s

Find- $
Replace- g

После приведенного выше регулярного выражения я получаю желаемый формат, однако мне нужно знать, можно ли это объединить, чтобы мне не нужно было делать это вручную после завершения каждого выражения или уменьшилось до одного выражения. Спасибо

1 ответ1

0

У вас уже есть нужные элементы, особенно группировка. Вам нужно найти:

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

Затем заменить на:

s/\2/\1/g

Обратите внимание, что это дает параметры sed вы цитируете, как то, что вы хотите получить, тогда как ваша последовательность опускает двоеточие в строке поиска sed и добавляет начальный пробел в строку замены 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

Для воспроизведения вашей последовательности вам нужно будет найти:

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

Затем заменить на:

s/\2/ \1/g

Тем не менее, sed замены не будут работать, если не сделаны в обратном порядке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .