2개의 문자열은 쉽게 비교되거나 유사 할 수 있습니다 test
.[[ ... ]]
문자열을 정규식과 비교
예를 들어
wolf@linux:~$ var1=`grep 'trap2sink 127.0.0.7 w0rd' snmpd.conf`
wolf@linux:~$
wolf@linux:~$ if [[ $var1 = 'trap2sink 127.0.0.7 w0rd' ]]; then
> echo Good
> else
> echo Bad
> fi
Good
wolf@linux:~$
여러 줄을 포함하는 일부 구성 세트는 어떻습니까?
목표는 모든 장치의 모든 구성이 표준을 준수하는지 확인하는 것입니다.
이것이 snmpd.conf의 표준이라고 가정합니다. 이것의 이름을 정하자snmpd.conf.standard
trap2sink 127.0.0.7 w0rd
rocommunity P@55 127.0.0.1
rocommunity 4nyth1ng 127.0.0.9
이는 장치 X의 구성 예입니다. 우리는 그것을 이름snmpd.conf
*** some random data here and there ***
rocommunity P@55 127.0.0.1
rocommunity 4nyth1ng 127.0.0.9
trap2sink 127.0.0.7 w0rd
*** some random data here and there ***
이 두 구성을 비교하는 가장 좋은 방법은 무엇입니까?
grep
여러 행의 데이터가 있으므로 이 경우에 사용할 수 있는지 잘 모르겠고 그 다음에는 if ... else
명령문을 사용합니다.
if [[ ... config matches ... ]]; then
echo Good
else
echo Bad
fi
이런 종류의 문제를 해결하는 가장 좋은 방법이 무엇인지 알려주십시오.
업데이트 1:빌 재저(작동합니다...실제 데이터로 테스트해보고 결과를 공유하겠습니다)
wolf@linux:~$ cat snmpd.conf
*** some random data here and there ***
rocommunity P@5s 127.0.0.1
rocommunity 4nyth1ng 127.0.0.9
trap2sink 127.0.0.7 w0rd
*** some random data here and there ***
wolf@linux:~$
wolf@linux:~$ cat snmpd.conf.standard
trap2sink 127.0.0.7 w0rd
rocommunity P@55 127.0.0.1
rocommunity 4nyth1ng 127.0.0.9
wolf@linux:~$
wolf@linux:~$ ptn='^(rocommunity|trap2sinc) ';
wolf@linux:~$ diff <(grep -E "$ptn" snmpd.conf | sort) <(grep -E "$ptn" snmpd.conf.standard | sort);
2c2
< rocommunity P@5s 127.0.0.1
---
> rocommunity P@55 127.0.0.1
wolf@linux:~$
답변1
ptn='^(rocommunity|trap2sinc) ';
diff <(grep -E "$ptn" file1| sort) <(grep -E "$ptn" file2| sort);
아무것도 반환하지 않으면 해당 줄은 두 파일 모두에 공통입니다.
답변2
파일을 체크섬하고 출력을 정렬하여 여러 파일을 한 번에 비교할 수 있습니다. 이렇게 하면 동일한 파일을 모두 그룹화하여 배신자를 찾아낼 수 있습니다.man cksum
Diff의 출력은 다소 모호하며 이해하려면 숙련된 눈이 필요합니다. 실제로 file1을 file2로 변환하는 일련의 명령( ed
명령에서 사용됨)을 실행합니다.
sdiff
파일을 나란히 표시하는 변형이 있어 이해하기 쉽습니다.man sdiff
"표준" 파일이 있으므로 먼저 해당 파일을 cksum한 다음 모든 파일을 cksum하고 grep -v를 사용하여 다른 파일을 찾으세요.
또는 파일이 동일한지 확인하는 가장 쉬운 방법은 다른 모든 파일에 기준을 복사하는 것입니다.
답변3
예를 들어 쉘 스크립트에서 자동화할 수 있는 프로세스를 갖는 것이 아이디어라면 Bill Jetzer와 Paul_Pedant의 콘솔 기반 답변이 아마도 최선의 접근 방식일 것입니다.
"눈으로" 확인하고 싶다면 meld
Windows의 "BeyondCompare"와 유사한 그래픽 도구이며 상당히 접근하기 쉬운 방식으로 텍스트 파일 간의 차이점을 보여주는 를 시도해 볼 수 있습니다.