Notepad++ 搜索和替换多个文本行
Notepad++ Search And Replace Multiple Text Lines
我在许多不同的规则规则中有成千上万个这样的规则
edit 1698
set src-address "172.29.44.51/32"
set dst-address "172.29.44.67/32"
set service "tcp-1022"
set service "tcp-1023"
set service "tcp-1090"
set service "tcp-1098-1102"
set service "tcp-115"
set service "tcp-123"
set service "tcp-13000"
set service "tcp-13001"
set service "tcp-14000"
set service "tcp-14001"
set service "tcp-15000"
set service "tcp-16000"
set service "tcp-1812"
set service "tcp-22"
set service "tcp-32770-32900"
set service "tcp-3307"
set service "tcp-3528"
set service "tcp-3600"
set service "tcp-4400-4500"
set service "tcp-4712-4715"
set service "tcp-5000"
set service "tcp-5000-5630"
set service "tcp-50023-50030"
set service "tcp-5632-7000"
set service "tcp-636"
set service "tcp-7500"
set service "tcp-7600"
set service "tcp-7650"
set service "tcp-7651"
set service "tcp-7900"
set service "tcp-8009"
set service "tcp-8093"
set service "tcp-8443"
set service "tcp-9000"
set service "tcp-9001"
set service "udp-1023"
set service "udp-1102"
set service "udp-123"
set service "udp-13001"
set service "udp-14000"
set service "udp-14000-14001"
set service "udp-161"
set service "udp-162"
set service "udp-177"
set service "udp-22"
set service "udp-389"
set service "udp-45600-45800"
set service "udp-5900"
set service "udp-7500"
set service "udp-8443"
set service "udp-9001"
set service "udp-920-940"
exit
我希望它将所有设置的服务行收集到一行中,就像这个例子
set service "PING" "tcp-1022" "tcp-1023" "tcp-1090" "tcp-1098-1102" "tcp-115" "tcp-123" "tcp-13000" "tcp-13001" "tcp-14000" "tcp-14001" "tcp-15000" "tcp-16000" "tcp-1812" "tcp-22" "tcp-32770-32900" "tcp-3307" "tcp-3528" "tcp-3600" "tcp-4400-4500" "tcp-4712-4715" "tcp-5000" "tcp-5000-5630" "tcp-50023-50030" "tcp-5632-7000" "tcp-636" "tcp-7500" "tcp-7600" "tcp-7650" "tcp-7651" "tcp-7900" "tcp-8009" "tcp-8093" "tcp-8443" "tcp-9000" "tcp-9001" "udp-1023" "udp-1102" "udp-123" "udp-13001" "udp-14000" "udp-14000-14001" "udp-161" "udp-162" "udp-177" "udp-22" "udp-389" "udp-45600-45800" "udp-5900" "udp-7500" "udp-8443" "udp-9001" "udp-920-940"
这是一个只有记事本++的解决方案。它正在使用宏,因为你说你有很多不同的规则文件。
- 宏 -> 开始录制,现在所有内容都录制到宏中
- 首先替换以标记设置服务块的开始:
- 按 Ctrl-Pos1,转到当前文件的开头。
- 搜索 -> 替换...:
查找内容:^(?!set service).+?\r\nset service
替换为:first set service
检查左下方正则表达式
- 按全部替换
- 第二个替换以起始行加入一组服务块:
- 按 Ctrl-Pos1,转到当前文件的开头。
- 搜索 -> 替换...:
查找内容:\r\nset service
替换为:``(无)
勾选左下方Extended
- 按全部替换
- 第三次替换以删除起始行中的标记:
- 按 Ctrl-Pos1,转到当前文件的开头。
- 搜索 -> 替换...:
查找内容:^first set service
替换为:set service
检查左下方正则表达式
- 按全部替换
- 宏 -> 停止录制
- 宏 -> 保存当前录制的宏,为其命名并为其创建键盘快捷键。
- 测试宏。如果有效,请继续,否则将其删除并重新开始录制。
现在您可以打开所有规则文件并将宏应用到每个文件。
如果需要删除宏,可以在宏 -> 修改 Shortcut/Delete 宏下找到它。
编辑:这里是调试你在评论中写的零匹配问题的截图:,请注意标记的部分:
\r\n
在查找表达式
- Dos\Windows 作为状态栏中的行尾类型
- 正则表达式勾选在左下方
- 文件区中搜索到的区域
需要修改的行数:
建议搜索正则表达式的结果:
我在许多不同的规则规则中有成千上万个这样的规则
edit 1698
set src-address "172.29.44.51/32"
set dst-address "172.29.44.67/32"
set service "tcp-1022"
set service "tcp-1023"
set service "tcp-1090"
set service "tcp-1098-1102"
set service "tcp-115"
set service "tcp-123"
set service "tcp-13000"
set service "tcp-13001"
set service "tcp-14000"
set service "tcp-14001"
set service "tcp-15000"
set service "tcp-16000"
set service "tcp-1812"
set service "tcp-22"
set service "tcp-32770-32900"
set service "tcp-3307"
set service "tcp-3528"
set service "tcp-3600"
set service "tcp-4400-4500"
set service "tcp-4712-4715"
set service "tcp-5000"
set service "tcp-5000-5630"
set service "tcp-50023-50030"
set service "tcp-5632-7000"
set service "tcp-636"
set service "tcp-7500"
set service "tcp-7600"
set service "tcp-7650"
set service "tcp-7651"
set service "tcp-7900"
set service "tcp-8009"
set service "tcp-8093"
set service "tcp-8443"
set service "tcp-9000"
set service "tcp-9001"
set service "udp-1023"
set service "udp-1102"
set service "udp-123"
set service "udp-13001"
set service "udp-14000"
set service "udp-14000-14001"
set service "udp-161"
set service "udp-162"
set service "udp-177"
set service "udp-22"
set service "udp-389"
set service "udp-45600-45800"
set service "udp-5900"
set service "udp-7500"
set service "udp-8443"
set service "udp-9001"
set service "udp-920-940"
exit
我希望它将所有设置的服务行收集到一行中,就像这个例子
set service "PING" "tcp-1022" "tcp-1023" "tcp-1090" "tcp-1098-1102" "tcp-115" "tcp-123" "tcp-13000" "tcp-13001" "tcp-14000" "tcp-14001" "tcp-15000" "tcp-16000" "tcp-1812" "tcp-22" "tcp-32770-32900" "tcp-3307" "tcp-3528" "tcp-3600" "tcp-4400-4500" "tcp-4712-4715" "tcp-5000" "tcp-5000-5630" "tcp-50023-50030" "tcp-5632-7000" "tcp-636" "tcp-7500" "tcp-7600" "tcp-7650" "tcp-7651" "tcp-7900" "tcp-8009" "tcp-8093" "tcp-8443" "tcp-9000" "tcp-9001" "udp-1023" "udp-1102" "udp-123" "udp-13001" "udp-14000" "udp-14000-14001" "udp-161" "udp-162" "udp-177" "udp-22" "udp-389" "udp-45600-45800" "udp-5900" "udp-7500" "udp-8443" "udp-9001" "udp-920-940"
这是一个只有记事本++的解决方案。它正在使用宏,因为你说你有很多不同的规则文件。
- 宏 -> 开始录制,现在所有内容都录制到宏中
- 首先替换以标记设置服务块的开始:
- 按 Ctrl-Pos1,转到当前文件的开头。
- 搜索 -> 替换...:
查找内容:^(?!set service).+?\r\nset service
替换为:first set service
检查左下方正则表达式 - 按全部替换
- 第二个替换以起始行加入一组服务块:
- 按 Ctrl-Pos1,转到当前文件的开头。
- 搜索 -> 替换...:
查找内容:\r\nset service
替换为:``(无) 勾选左下方Extended - 按全部替换
- 第三次替换以删除起始行中的标记:
- 按 Ctrl-Pos1,转到当前文件的开头。
- 搜索 -> 替换...:
查找内容:^first set service
替换为:set service
检查左下方正则表达式 - 按全部替换
- 首先替换以标记设置服务块的开始:
- 宏 -> 停止录制
- 宏 -> 保存当前录制的宏,为其命名并为其创建键盘快捷键。
- 测试宏。如果有效,请继续,否则将其删除并重新开始录制。
现在您可以打开所有规则文件并将宏应用到每个文件。 如果需要删除宏,可以在宏 -> 修改 Shortcut/Delete 宏下找到它。
编辑:这里是调试你在评论中写的零匹配问题的截图:
\r\n
在查找表达式- Dos\Windows 作为状态栏中的行尾类型
- 正则表达式勾选在左下方
- 文件区中搜索到的区域
需要修改的行数:
建议搜索正则表达式的结果: