notepad ++正则表达式查找并计数或复制

时间:2018-06-24 21:11:24

标签: regex notepad++

我想获取配置文件中所有出现的内容,其中第一行从“ object”开始,第二行以“ nat”开始

object network obj_any

 nat (inside,outside) dynamic interface

object network obj-test

 nat (DMZ1,outside) static 10.206.49.180

object network obj-192.168.236.200

 nat (DMZ1,outside) static 10.206.74.60

object network obj-192.168.236.8

 nat (DMZ1,outside) static 10.206.49.183 tcp 8080 80

object network obj-192.168.236.9

 nat (DMZ1,outside) static 10.206.49.178 tcp 1002 22

object network obj-192.168.236.10

 nat (DMZ1,outside) static 10.206.49.178 tcp 8080 80

object network obj-192.168.236.13

 nat (DMZ1,outside) static 10.206.74.58 dns

我在下面尝试过,但似乎不起作用

object network .+? nat .+? static .+?

并选择了“匹配新行”,但似乎不匹配

2 个答案:

答案 0 :(得分:0)

您可以查找非换行字符,而不是.*
Notepad ++正则表达式搜索多行,因此^匹配每行的开头。

正则表达式:

^(object network\s+)([^\r\n]+)[\r\n]+\s*(nat)\s+([^\r\n]+)[\r\n]+

搜索模式:

Regular expression (with or without the checkbox for dot)

额外

您可以使用PowerShell将它们从文件中提取到新文件中。

例如,读取“ filein.txt”并将匹配项输出到“ fileout.txt”:

cat -Path .\filein.txt -Raw |sls -Pattern '(?m)^object network\s+[^\r\n]+\s+nat\s+[^\r\n]+\r?\n' -AllMatches|%{$_.Matches.Value} >.\fileout.txt

答案 1 :(得分:0)

我相信使用Notepad ++不能一步一步完成。复制行的多步骤过程如下。

(1)找到所需的线对,并使用标记字符串将它们合并为单行。 (2)用标记将所有行添加为书签并进行复制。 (3)将所需的行粘贴到新的缓冲区中,然后将标记字符串转换回换行符。


更多细节。

(设置)选择一个标记字符串,该字符串不会出现在正在搜索的缓冲区或目标缓冲区中的任何位置。在此示例中,我选择!!!

(1)用{\ 1 !!! \ 2'替换^(object.*)\R+( nat.*)$的正则表达式。这将转换所需的行,因此问题中显示的第一对变为:

object network obj_any!!! nat (inside,outside) dynamic interface

(2)打开搜索窗口,然后选择Mark标签。单击Clear all marks,勾选Bookmark line,在!!!字段中输入标记字符串(即Find what),然后单击Mark all。选择菜单=> 搜索 => 书签 => 复制添加了书签的行

(3)选择复制行应写入的位置,并在复制行中选择Paste。执行正则表达式搜索,并将!!!替换为\r\n\r\n。 (如果您首选的行尾不是Windows,则可能需要更改替换字符串。)

注释

以上内容并未保留两行之间CR和LF的确切顺序。第一次替换使用\R+在两行之间查找CR和LF的任何组合。最后的替换插入固定的CR和LF序列。

使用删除未标记的行,而不是使用复制书签的行,可能会比较合适,因为这会在缓冲区中仅保留所需的行。这样就不需要CopyPaste命令,可以在初始缓冲区中进行最终的搜索和替换。