
Я много читал о том, как заменить его с помощью Notepad++, но, похоже, так и не пришел ни к чему.
Вот пример конфигурации Juniper, которую я изменю на другой язык:
set policy id 3016 from "CSA" to "Untrust" "1.1.1.1/32" "2.2.2.2/32" "SSH" permit log
set policy id 3016
set dst-address "3.3.3.3/32"
exit
!
set policy id 3053 name "Footprints" from "Untrust" to "CSA" "Blocked Addresses" "Any" "ANY" deny log
set policy id 3053
exit
Теперь я хочу изменить это на Fortinet Language, но для того, чтобы начать этот процесс, мне нужно, чтобы он искал определенные переменные. Несколько битов, которые мне нужно изменить, это:
set policy id 3016 from "CSA" to "Untrust" "1.1.1.1/32" "2.2.2.2/32" "SSH" permit log
set policy id 3016
set dst-address "3.3.3.3/32"
exit
!
set policy id 3053 name "Footprints" from "Untrust" to "CSA" "Blocked Addresses" "Any" "ANY" deny log
set policy id 3053
exit
к
edit 0
set srcintf "CSA"
set dstintf "Untrust"
set srcaddr "1.1.1.1/32"
set dstaddr "2.2.2.2/32" "3.3.3.3/32"
set action accept
set schedule "always"
set service "SSH"
set fsso disable
set nat enable
next
edit 0
set name "Footprints"
set srcintf "Untrust"
set dstintf "CSA"
set srcaddr "Blocked Addresses"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set fsso disable
set nat enable
next
поэтому я использовал следующее, чтобы попытаться начать сначала:
Найти (set policy id (.+))
и заменить на edit 0
— похоже, это выделяет все и оставляет мне пустую конфигурацию, в которой осталось только изменить 0.
Затем я попробовал найти (set policy id *)
и заменить на edit 0
- это оставляет мне все, но изменяет так, что это выглядит так, как показано ниже: (По сути, вставляет 0 перед XXXX
edit 03016 from "CSA" to "Untrust" "1.1.1.1/32" "2.2.2.2/32" "SSH" permit log set policy id 3016 set dst-address "3.3.3.3/32" exit
Любая помощь будет очень признательна, так как это может сэкономить мне часы!!!!
решение1
ИМХО, вам следует написать сценарий на вашем любимом языке программирования.
Но если вы действительно хотите сделать эту работу с Ntepad++, вот решение regex. Как вы видите, regex и замена немного сложны и требуют хороших знаний для поддержки.
Ctrl+H
Найти то, что:
set policy id \d+ (?:(?:(?!exit).)*?name (".+?"))?(?:(?!exit).)*?from (".+?")(?:(?!exit).)*?to (".+?")(?:(?!exit).)*?("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") ("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") (".+?")(?:(?:(?!exit).)*?set dst-address (".+?"))?(?:(?!exit).)+?exit
Заменить:
edit 0\n\t(?1set name $1\n\t:)set srcintf $2\n\tset dstintf $3\n\tset srcaddr $4\n\tset dstaddr $5(?7 $7:)\n\tset action accept\n\tset schedule "always"\n\tset service $6\n\tset fsso disable\n\tset nat enable\nnext
ПРОВЕРЯТЬ Учитывать регистр
ПРОВЕРЯТЬ Обернуть вокруг
ПРОВЕРЯТЬ Регулярное выражение
ПРОВЕРЯТЬ
. matches newline
Replace all
Find All in Current Document
Объяснение:
set policy id \d+ # literally and digits for id
(?: # non capture group
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
name (".+?") # name is captured in group 1
)? # end group, optional
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
from (".+?") # from is captured in group 2
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
to (".+?") # to is captured in group 3
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") # group 4, src IP or literal like "Blocked Addresses"
("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") # group 5, dst IP or literal like "Any"
(".+?") # group 6, service
(?: # non capture group
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
set dst-address # literally
(".+?") # group 7, 1 or more any character, not greedy
)? # end group, optional
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
exit # literally
Замена:
edit 0\n\t # edit 0 followed by linefeed and tabulation
(?1 # if group 1 exists, (name)
set name $1\n\t # print the name (group 1)
: # else
# nothing
) # end if
set srcintf $2\n\t # and so on ...
set dstintf $3\n\t
set srcaddr $4\n\t
set dstaddr $5
(?7 $7:)\n\t
set action accept\n\t
set schedule "always"\n\t
set service $6\n\t
set fsso disable\n\t
set nat enable\n
next
Снимок экрана (до):
Снимок экрана (после):
Вы найдете полное объяснениездесь