DIFF에서 단 하나의 파일에서 행 나열


34

(GNU) DIFF를 사용하여 하나의 파일에서 다른 줄만 출력하고 싶습니다. 그래서 주어진

    ==> diffa.txt <==
    line1
    line2 - in a only
    line3
    line4 changed
    line5

    ==> diffb.txt <==
    line1
    line3
    line4 changed in b
    line5
    line6 in b only

나는 diff --someoption diffa.txt diffb.txt생산하고 싶다

    line2 - in a only

    line4 changed

다음은 도움이 될 것 같지만 약간 비밀입니다.

   --GTYPE-group-format=GFMT
          Similar, but format GTYPE input groups with GFMT.

   --line-format=LFMT
          Similar, but format all input lines with LFMT.

   --LTYPE-line-format=LFMT
          Similar, but format LTYPE input lines with LFMT.

   LTYPE is `old', `new', or `unchanged'.
          GTYPE is LTYPE or `changed'.

          GFMT may contain:

   %<     lines from FILE1

   %>     lines from FILE2

매뉴얼 페이지는이 플래그들에 대해 약간 간결합니다! 좋은 질문.
quickshiftin

1
나는 'info diff'가 완전한 예제를 줄 것이라고 지적하고 싶습니다. 정보에는 풍부한 정보가 있습니다.
Baroudi Safwen

답변:


42

확실하지 diff혼자 할 수 있지만 당신은 항상 당신을 도울 다른 GNU 유틸리티의 기능을 사용할 수 있습니다.

diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'

diff를 수행 한 다음 '-'로 시작하는 줄만 선택합니다. 줄은 변경되고 diffa.txt 파일의 값을 가진 다음 sed'-'부호를 제거하십시오.

편집 : 을 몇 번 실험 한 후 diff아래 명령이 원하는 것을 생성하는 것처럼 보입니다.

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

일회성으로 파이프 방법이 좋습니다. 나는 s / ^-// "라면`perl -ne"print를 선호하지만 맛이다. 나는 --changed-group-format='%<'내가 지금 무엇 을하고 있는지 알 것 같다 ....
justintime

감사. : DI는 두 컴퓨터 사이의 모든 패키지를 나열하기 위해 이와 같은 것이 필요했고 sdiff를 사용했지만 조금 더 좋아 보입니다.
Rob

12

더 간단한 방법은 comm리눅스 유틸리티 를 사용하는 것 입니다 (입력을 위해 정렬 된 파일이 필요합니다). 표준 출력에 씁니다.

  • diffa.txt에 고유 한 줄

  • diffb.txt에 고유 한 줄

  • 일반적인 선

매개 변수 1, 2 또는 3에 따라 각각을 억제 할 수 있습니다. 따라서 귀하의 경우 다음과 같이 보일 것입니다 :

comm -23 diffa.txt diffb.txt

diffb.txt에 고유 한 행, 공통 행을 표시하지 않고 diffa.txt에 대해서만 고유 한 행을 인쇄합니다.

출처 : https://www.tutorialspoint.com/unix_commands/comm.htm


나는 diff이것이 내가 기대하는 것을하지 않는 것보다 훨씬 쉽다 는 것을 알았습니다. 그리고 나는 BSD (예 : Mac OS X)와 우분투에 사전 설치되어 패키지 관리자의 악몽이 없다고 생각합니다.
Sridhar Sarnobat가

3

comm정렬 된 입력 파일이 필요하므로와 다른 결과를보고 한다고 언급하고 싶습니다 diff.

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

보편적입니다. @vava에 Kudos

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.