问题
I have thousands of these in many different rules rules
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
i want it to collect all set service lines into one line to be like this example
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"
回答1:
Here is a notepad++ only solution. It is using macros, because you say you have many different rule files.
- Macro -> Start Recording, now everything is recorded to a macro
- First Replace to mark the start of a set service block:
- Press Ctrl-Pos1, to go to the beginnig of current file.
- Search -> Replace...:
Find What:^(?!set service).+?\r\nset service
Replace With:\1first set service\3check Regular Expression in the lower left - Press Replace All
- Second Replace to join a set service block with the starting line:
- Press Ctrl-Pos1, to go to the beginnig of current file.
- Search -> Replace...:
Find What:\r\nset service
Replace With: `` (nothing) check Extended in the lower left - Press Replace All
- Third Replace to remove the tag in the starting line:
- Press Ctrl-Pos1, to go to the beginnig of current file.
- Search -> Replace...:
Find What:^first set service
Replace With:set servicecheck Regular Expression in the lower left - Press Replace All
- First Replace to mark the start of a set service block:
- Macro -> Stop Recording
- Macro -> Save Current Recorded Macro, give it a name and create a keyboard shortcut for it.
- Test the Macro. If it works, continue, else delete it and restart recording.
Now you can open all your rule files and apply the Macro to each file. If you need to delete the macro, you find it under Macro -> Modify Shortcut/Delete Macro.
Edit: here is a screenshot to debug the problems with the zero matches you write about in the comments: , please note the marked sections:
\r\nin the Find expression- Dos\Windows as lineending type in the status bar
- Regular expression is checked in the lower left
- the region that is matched by the search in the file area
The number of lines have to be modified:
The result of suggested search Regex:
来源:https://stackoverflow.com/questions/34476116/notepad-search-and-replace-multiple-text-lines