snmpd.conf 파일이 두 개 있는데, 하나는 작동하는 서버와 다른 하나는 작동하지 않는 파일입니다. 관련없는 주석과 줄 바꿈을 제거하면서 두 개의 구성 파일을 어떻게 구별 할 수 있습니까?
snmpd.conf 파일이 두 개 있는데, 하나는 작동하는 서버와 다른 하나는 작동하지 않는 파일입니다. 관련없는 주석과 줄 바꿈을 제거하면서 두 개의 구성 파일을 어떻게 구별 할 수 있습니까?
답변:
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
공백 행과 공백 만 포함하는 행과 추가 된 선행 공백의 단일 차이를 갖는 동일한 행을 피하려면 ...
diff -b \
<(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
<(grep -vE '^([ \t]*#|^[ \t]*$)' f2)
그러나이 시점에서 아마 스크립트에 넣고 조금 더 읽기 쉬운 원래 제안과 같은 것을 쓸 것입니다.
vim에 다소 익숙하다면 vimdiff 를 사용하는 것이 좋습니다 .
vimdiff file1 file2
그러면 양쪽에 하나의 파일이있는 두 개의 창이있는 vim 세션이 열립니다. 강조 표시 및 색상은 파일 간의 차이를 나타내며 모든 동일한 부분이 숨겨 지지만 (접히지 만 확장 가능)
그런 다음 한 파일에서 다른 파일로 차이점을 선택적으로 병합하려면 다음 명령을 사용할 수 있습니다.
( "현재 파일"을 커서가있는 것으로 간주하십시오)
한 파일의 창에서 다른 파일의 창으로 포커스를 변경하는 ^ W ^ W
] c 차이로 다음 블록으로 이동
[c 차이가있는 이전 블록에 대한 검색을 반대로하려면
할 ( D IFF 오 btain) 현재 파일에 다른 파일에서 변화를 가져올에
DP ( D IFF P의 UT)이 다른 파일에 현재 파일의 변경을 보내
참고 : 블록에 있거나 블록 아래에 한 줄이면 do 와 dp 모두 작동합니다.
U 에 유 은도
텍스트를 펼치거나 숨기기를 해제하는 zo
텍스트를 다시 접거나 다시 숨기려면 zc
zr 은 두 파일을 완전히 펼칩니다 ( 접힘에 대한 자세한 내용은 : help fold 사용 )
: diffupdate 는 파일 변경 사항을 다시 검색합니다.
변경된 텍스트를 옮기거나 변경을 시작하면 파일의 동일 부분도 자동으로 접 힙니다.
완료되면 : xa!를 사용 하여 두 파일을 모두 종료하고 쓸 수 있습니다 .
vim을 사용하는 것처럼 한 번에 한 창씩 변경, 쓰기, 종료 등을 할 수도 있습니다.
모든 일반적인 vim 명령을 사용하여 원하는대로 파일을 편집 할 수 있습니다. vimdiff 세션에서 사용할 수있는 가장 일반적이고 유용한 명령에 대해서만 설명했습니다 (일반 vim과는 반대).
Beyond Compare는이를위한 최고의 도구입니다!
링크 : http://www.scootersoftware.com/
Windows 및 Linux에서 사용 가능합니다.
Jeff는이 도구에 대한 좋은 개요 기사를 작성했습니다.
http://www.codinghorror.com/blog/archives/000454.html
nima의 one-liner에서 확장하면 쉘 함수로 수행하여 .bashrc에 넣을 수 있습니다
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
(통합 diff를 좋아하기 때문에 -u 사용)
function cleandiff {
diff -u <(grep -v '^#' $1| grep -v '^ *$') <(grep -v '^#' $2 | grep -v '^ *$')
}
GUI diff 뷰어를 좋아한다면 meld는 훌륭하며 개정 제어 dirs / 파일을 이해합니다.
주석을 청소 한 후 KDiff3을 사용하는 것이 좋습니다. 꽤 좋은 diff / 병합 도구이며 사용하기 위해 vim fu가 필요하지 않습니다. :)
Xerxes 솔루션을 확장 diff
하면 차이점을 표시하는 것보다 더 정교한 도구를 사용할 수 있습니다 .
wdiff
때로는 "너무 똑똑해"할 수 있지만 구성 파일의 차이점을 한 눈에 파악하는 데 유용한 경우가 많습니다. 이 스크립트는 색상으로 출력하는 데 사용할 수 있습니다.
#!/bin/bash
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
WDIFF_ARGS="-w$RED -x$RESET -y$GREEN -z$RESET --avoid-wraps"
wdiff $WDIFF_ARGS \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $2) \
| less -R
apt-get install wdiff
이 스크립트를 사용하기 직전에 Ubuntu 및 기타 데비안 기반 시스템에서 .
Meld는 훌륭한 GUI 대안이지만 "텍스트 필터링"기능에는 몇 가지 문제가 있습니다. 텍스트 필터링을 사용하는 대신 Meld에 결과를 표시하기 전에 주석을 모두 제거했습니다. 단점은 파일을 비교하는 동안 파일을 편집하는 기능을 잃어 버리는 것입니다. 다음은 Meld를 사용하는 간단한 스크립트입니다.
#!/bin/bash
meld <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
<(grep -vE '^([ \t]*#|^[ \t]*$)' $2)
WinMerge http://winmerge.org 를 사용 하여 파일을 내 컴퓨터로 가져와야하지만 파일을 diff해야하지만 제대로 작동합니다.
level
! =)