파일이 2개 있는데 비교해보고 싶습니다 a.txt
.b.txt
a.txt
포함하다:
abc
jkl < jkl
mno > mno
pqr <> pqr
b.txt
포함하다:
abc
jkl < jkl
mno > mno
pqr <> pqrs
stu
나는 이 스크립트를 사용하고 있습니다:
$ diff a.txt b.txt | grep "> " | cut -c3- > c.txt
결과 c.txt
:
pqr <> pqr
pqr <> pqrs
stu
왜 pqr <> pqr
결과에 포함되나요? 이 문제를 어떻게 해결할 수 있나요?
답변1
@StephaneChazelas가 지적했듯이 정규식을 고정하는 것을 잊었 "> "
으므로 >
.pqr <> pqr
a.txt
하지만 필터가 .NET에서 새로 추가되었거나 변경된 행만 표시하도록 하려는 것 같습니다 b.txt
. GNU diff를 사용하는 경우 이를 직접 수행할 수 있는 몇 가지 옵션이 제공됩니다.
$ diff --old-line-format '' --unchanged-line-format '' --new-line-format '%L' a.txt b.txt
pqr <> pqrs
stu
--old-line-format ''
에 없는 모든 줄을 제거하고 b.txt
두 --unchanged-line-format ''
파일에 공통된 모든 줄을 제거하며 --new-line-format '%L'
에 있는 새 줄이나 변경된 줄의 줄 내용만 표시합니다 b.txt
. 리드가 >
억제되었습니다.
답변2
@StephaneChazelas가 의견에서 말했듯이 이것은 SSH와 관련이 없는 것 같습니다. 모든 것을 로컬에서 실행하면 주로 다음과 같은 결과를 얻을 수 있습니다.
$ diff a.txt b.txt | grep "> " | cut -c3-
pqr <> pqr
pqr <> pqrs
stu
이 diff
명령은 서로 다른 줄을 인식하며 해당 줄은 pqr <> pqrs
두 파일 모두에서 고유합니다. 도움이 된다면 병렬 비교를 사용하여 어떤 행이 정렬되는지 확인할 수 있습니다.
$ diff -y a.txt b.txt
abc abc
jkl < jkl jkl < jkl
mno > mno mno > mno
pqr <> pqr | pqr <> pqrs
> stu
유사하지만 동일하지 않은 라인은 표시됩니다 |. 유일한 줄에는 " >파일 #2에만 있는 경우" 또는 " <파일 #1에만 포함된 경우"라는 레이블이 지정됩니다. 동일한 선에는 그러한 표시가 표시되지 않습니다.
답변3
어쩌면 여분의 공백이 있을 수도 있습니다.
노력하다
diff -w -B file1.txt file2.txt
-w는 모든 공백을 무시합니다.
-B 모든 행이 비어 있는 변경 사항을 무시합니다.