依次执行多个正则表达式或将多个正则表达式合并为一个

依次执行多个正则表达式或将多个正则表达式合并为一个

我使用的是 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

您已经拥有所需的元素,尤其是分组。您需要找到:

^.*/(.*:)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除非按相反的顺序进行,否则替换不会起作用。

相关内容