diff가 예상한 대로 작동하지 않습니다.

diff가 예상한 대로 작동하지 않습니다.

파일이 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 <> pqra.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 모든 행이 비어 있는 변경 사항을 무시합니다.

관련 정보