Regex 记事本++;搜索并替换多个文本行

Regex 记事本++;搜索并替换多个文本行,regex,notepad++,Regex,Notepad++,我在很多不同的规则中都有数千个这样的规则 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"

我在很多不同的规则中都有数千个这样的规则

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键,转到当前文件的开头
    • 搜索->替换…:
      查找内容
      ^(?!设置服务)。+?\r\n设置服务

      替换为
      \1第一套服务\3
      选中左下角的正则表达式
    • 按全部替换
  • 第二次替换以将集合服务块与起始线连接:
    • 按Ctrl-Pos1键,转到当前文件的开头
    • 搜索->替换…:
      查找内容
      \r\n设置服务

      替换为:`(无) 选中左下角的扩展
    • 按全部替换
  • 第三次更换以移除起跑线上的标签:
    • 按Ctrl-Pos1键,转到当前文件的开头
    • 搜索->替换…:
      查找内容
      ^第一套服务

      替换为
      设置服务
      选中左下角的正则表达式
    • 按全部替换
  • 宏->停止录制
  • 宏->保存当前录制的宏,为其命名并为其创建键盘快捷键
  • 测试宏。如果有效,请继续,否则请删除并重新开始录制 现在,您可以打开所有规则文件并将宏应用于每个文件。 如果需要删除宏,可以在“宏->修改快捷方式/删除宏”下找到它

    编辑:这是一个屏幕截图,用于调试您在评论中提到的零匹配问题:,请注意标记的部分:

    • 查找表达式中的
      \r\n
    • Dos\Windows作为状态栏中的行尾类型
    • 正则表达式在左下角被选中
    • 与文件区域中的搜索匹配的区域
    必须修改行数:

    建议搜索正则表达式的结果:


    我尝试过,但单击“全部替换”后,它会显示“全部替换:0发生被替换”,这意味着搜索不起作用。请确保已选中“替换”对话框左下角的“扩展”。确保\r\n与Dos\Windows lineendings匹配。如果您使用的是Unix lineendings,请在搜索中将\r\n替换为\n。Notepad++在右侧的状态栏中显示了行尾的类型。在上面的注释中,您指出每个文件有许多设置服务块。这意味着每个文件运行一个宏的答案将不起作用。我将尝试使用正则表达式。我更改了指令以处理每个文件的几个块。当我尝试第一步时,结果仍然是相同的“全部替换:0次出现被替换”-我正在使用带记事本的windows++