두 개의 구성 파일을 어떻게 비교할 수 있습니까? 다른 하나는 작동하지 않는

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)이 다른 파일에 현재 파일의 변경을 보내

참고 : 블록에 있거나 블록 아래에 한 줄이면 dodp 모두 작동합니다.

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가 필요하지 않습니다. 🙂


답변

그것을하는 더 우아한 방법이있을 수 있지만 실용적으로 (그리고 빨리) :

grep -v '^#' server1-snmpd.conf | grep -v '^ *$' > server1-snmpd.conf-clean
grep -v '^#' server2-snmpd.conf | grep -v '^ *$' > server2-snmpd.conf-clean
diff server1-snmpd.conf-clean server2-snmpd.conf-clean

답변

bash와 같은 쉘을 사용하는 경우 다음을 시도하십시오.

# Name this diff-stripped
STRIPPED=
for i in $*; do
    egrep -v "^#|^\s*" "$i" > "$i.stripped"
    STRIPPED="$STRIPPED $i.stripped"
done

diff $STRIPPED

그런 다음 다음과 같이 호출하십시오.

 diff-stripped file1 file2 ...

당신은 또한 변경할 수 있습니다 diffvimdiffgvimdiff있는 모두와 함께 vim.