>

유닉스 파일을 조건부로 포맷하고 싶었습니다. 현재 diff 에서 작업하고 있습니다.   diff 의 텍스트를 형식화 할 수 있는지 알고 싶었습니다.  명령 출력.

예 :

와이즈 비즈

2 개의 파일이 있다고 가정 해 봅시다.  그리고

Matched values should be displayed in green.
Unmatched values should be displayed in red.

 내 명령은 file1 입니다 .

이제 출력에 5 개의 불일치가 있다고 가정하면 불일치가 빨간색으로 표시되어야합니다. 유닉스를 사용하여 이것을 달성하는 방법?

간단히 말해서 "일치하지 않는 값에 대한 diff 명령의 출력에 대해 색상을 빨간색으로 변경하십시오"

file2
  • 답변 # 1

    GNU diff 에 액세스 할 수있는 경우  당신은 그것의 --X-group-format 를 사용할 수 있습니다  추가 도구없이 효과를 얻을 수있는 옵션 :

    diff --old-group-format=$'\e[0;31m%<\e[0m' \
         --new-group-format=$'\e[0;31m%>\e[0m' \
         --unchanged-group-format=$'\e[0;32m%=\e[0m' \
         file1 file2
    
    

    이것은 ANSI 색상 이스케이프 코드를 사용하여 빨강과 초록을 얻습니다. 쉘에서 ANSI-C 따옴표를 사용하여 \e 에 액세스하십시오.  탈출.

    --old-group-format  그리고 --new-group-format  일치하지 않는 라인을 식별하고 %< 를 사용하여 빨간색과 색상 재설정 코드 사이에 삽입하십시오  그리고 %> --unchanged-group-format 동안  녹색 코드와 재설정 코드 사이에 일치하는 줄을 삽입합니다.

    --old-line-format 를 사용할 수도 있습니다  (etc), 모든 라인에서 중복 색상 이탈을 희생 함 : --old-line-format=$'\e[0;31m%L\e[0m' .

  • 답변 # 2

    diff --color  옵션이 추가되었습니다 GNU diffutils 3.4 (2016-08-08)

    이것은 기본 diff 입니다  곧 배포 될 대부분의 배포판에서 구현됩니다.

    3.5에서는 다음과 같습니다 :

    with :

    diff --color -u \
      <(seq 6 | sed 's/$/ a/') \
      <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
    
    

    나는 또한 diff-highlight 에서와 같이 단어 수준 diff를 요청했습니다  at : [Diffutils-devel] git의 diff-h와 같은 컬러 출력을 생성하는 플래그를 추가하십시오 | lists.gnu.org

    커밋 c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (2015 년 3 월)에 추가되었습니다.

  • 답변 # 3

    colordiff file1 file2 사용해보기

    와이즈 비즈

    (http://www.colordiff.org/에서 인용)

  • 답변 # 4

    색상,단어 수준

    Availability of colordiff with your Linux/BSD distribution

    Those running Debian or Ubuntu (or any of their derivatives) can probably just use "apt-get install colordiff" to download and install; colordiff is also packaged for a number of other Linux, UNIX and BSD distributions and operating systems.

     출력

    아래 스크립트와 diff-highlight로 수행 할 수있는 작업은 다음과 같습니다.

    diff
    
    

    ( #!/bin/sh -eu # Use diff-highlight to show word-level differences diff -U3 --minimal "$@" | sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' | diff-highlight 에 대한 @retracile의 답변)  강조 표시)

  • 답변 # 5

    sed 를 살펴 봐야합니다  github에서 사용 가능한 명령 : hl : http://www.flashnux.com/notes/page_000022_US.html

    git clone http://github.com/mbornet-hl/hl  C로 작성된 Linux 명령으로, 특히 텍스트 파일이나 명령의 출력을 채색하도록 설계되었습니다. 최대42 개의 색상을 동시에 사용하고 구성 파일을 사용하여 명령 줄을 단순화 할 수 있습니다. 다른 명령으로 파이프 될 수있는 모든 명령의 출력을 채색 할 수 있습니다. 정규식이 무엇인지 아는 경우 사용하기가 매우 쉽습니다. 당신은 hl 를 사용할 수 있습니다  사용 방법을 이해하려면 페이지를 참조하십시오.
    와이즈 비즈  사용 및 구성이 매우 쉽습니다.hl_generic스크립트를 사용하여 구문을 수정하지 않고 명령 출력에 색상을 지정할 수도 있습니다.
    예를 들어, man 의 출력을 채색 할 수 있습니다  일반적인 명령을 입력하여 명령을 입력하십시오 :

    hl
    
    

    도움이 필요하면 이메일을 보내주세요.
    감사합니다.

    diff

  • 이전 linux - VLAN 생성
  • 다음 shell script - awk - 여러 dat 파일의 두 번째 줄을 하나의 파일로 출력