fortigate 구성 파일 내에서 주소 정의가 사용되는지 알아보려고 합니다.
구성 파일에서 주소가 포함된 섹션을 추출했습니다. 이 섹션의 행은 다음과 같습니다.
edit "address name"
set associated-interface "someinterface"
set subnet 1.1.1.1 0.0.0.0
이제 주소 이름을 사용하고 다음을 수행하여 규칙이나 주소 그룹이 이를 사용하는지 확인하고 싶습니다.
IFS='
'
for address in $(grep edit addresses.txt | cut -c10- | sed 's/"//'g); do echo $address; grep -n $address fortigate.conf; done
내가 가져온 IFS 섹션여기.
이것은 주소 정의 이름 목록을 반환하지만 grep 명령은 아무것도 찾지 못합니다. 적어도 자체적으로 찾아야 하기 때문에 이상합니다. 그렇죠?
답변1
IFS가 없으면 더 간단할 수 있습니다.
grep edit addresses.txt | cut -d\" -f2 | while read addr
do
echo "addr=[$addr]"
grep -n "$addr" fortigate.conf
done
답변2
당신의 cut
명령은 너무 급진적입니다. 단독으로 실행하면 다음과 같은 효과를 볼 수 있습니다.
$ grep edit yyyy
edit "address name"
$ grep edit yyyy |cut -c10-
ress name"
다음을 조정하세요 cut
.
$ grep edit yyyy |cut -c6-
"address name"
답변3
주소 이름의 공백이 문제의 원인일 수 있습니다. 노력하다:
IFS='
'
for address in $(grep edit addresses.txt | cut -c10- | sed 's/"//'g); do echo $address; grep -n "$address" fortigate.conf; done
참고: 주변에 따옴표가 있습니다.$주소grep할 때