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가 필요하지 않습니다. 🙂
답변
그것을하는 더 우아한 방법이있을 수 있지만 실용적으로 (그리고 빨리) :
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 ...
당신은 또한 변경할 수 있습니다 diff
에 vimdiff
나 gvimdiff
있는 모두와 함께 vim
.