
Notepad++로 바꾸는 방법을 찾으려고 많은 책을 읽었지만 아무데도 끝나지 않는 것 같습니다.
다음은 다른 언어로 변경할 Juniper Config의 예입니다.
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 언어로 변경하고 싶지만 이 프로세스를 시작하려면 특정 변수를 찾아야 합니다. 변경해야 할 몇 가지 비트는 다음과 같습니다.
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
. 이로 인해 모든 것이 남지만 변경되어 아래와 같이 보입니다. (기본적으로 XXXX 앞에 0을 삽입합니다.
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
IMHO 당신이 가장 좋아하는 스크립트 언어로 스크립트를 작성해야 합니다.
하지만 정말로 Ntepad++로 이 작업을 수행하고 싶다면 정규식 솔루션이 있습니다. 보시다시피 정규식과 교체는 약간 복잡하며 유지 관리하려면 좋은 지식이 필요합니다.
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
화면 캡처(이전):
화면 캡처(이후):
완전한 설명을 찾을 수 있습니다.여기