我想获取配置文件中所有出现的内容,其中第一行从“ 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 .+?
并选择了“匹配新行”,但似乎不匹配
答案 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序列。
使用删除未标记的行,而不是使用复制书签的行,可能会比较合适,因为这会在缓冲区中仅保留所需的行。这样就不需要Copy
和Paste
命令,可以在初始缓冲区中进行最终的搜索和替换。