문제

저는 상당히 오래된 파일을 가지고 Mac에서 작업하고 있습니다.서로 다른 파일은 서로 다른 프로그램에서 생성되었으므로 그 중 일부는 (mac)로 끝나고 일부는 (unix)으로 끝납니다.나는 이 파일들에 대해 diff, grep 등과 같은 명령을 실행할 수 있기를 원하지만 이 있는 명령은 하나의 거대한 줄로 처리됩니다.모든 줄 바꿈에서 올바르게 작동하는 diff, grep 등의 버전을 아는 사람이 있습니까?

예상 시간:또한 스크립트, Emacs 등에서 사용할 수 있도록 유닉스 유틸리티로 만들고 싶습니다.

도움이 되었습니까?

해결책

Jay가 말했듯이 Diff'npatch는 당신이 찾고있는 것 같습니다. 또는 다음과 같은 단일 명령으로 모든 ' r'라인 엔딩을 ' n'로 변환 할 수 있습니다.

sed -ie 's/\r/\n/' filename

또는

find . | xargs -n1 sed -ie 's/\r/\n/'

(후자의 경우 어떤 방식으로 파일 목록을 필터링하려고하거나 모든 하위 디렉터의 모든 파일에 적용됩니다.)

다른 팁

당신이 사용하는 경우 차이점 -w 파일의 공백을 무시하므로 이는 아마도 귀하의 요구에 충분할 것입니다.

편집하다:내가 처음에 게시물을 잘못 읽었다는 것을 방금 깨달았고 당신은 실제로 사용할 수 있는 차이점을 찾고 있습니다. \r 줄 끝.내 제안은 다음과 같은 파일을 변환하는 것입니다 튀기다 파일을 다음으로 변환할 수 있습니다. \n 표준 형식.

편집 2:방금 원하는 것과 비슷한 것을 찾았습니다. Diff'nPatch:

Diff'nPatch는 매킨토시로의 포트입니다. GNU 'diff', 'patch' 및 'cmp' 유틸리티.그것은 당신이 비교할 수 있습니다 두 파일 간의 차이점 찾기 또는 폴더, 두 개의 파일 한 부씩 인쇄, 생성 다양한 형식의 diff(일반, context, unidiff 등), 적용 패치, 바이트 단위로 파일을 비교합니다.모든 유형의 줄 끝을 처리할 수 있습니다 (Mac, Unix 또는 Windows)

OSX Lion과 함께 번들로 제공되는 Diff 유틸리티에는 원하는 'Strip-Trailing-CR'옵션이 있습니다. 당신은 그렇게 사용합니다.

diff -cpt a.c b.c --strip-trailing-cr

dos2unix 명령은 파일을 먼저 일관된 형식으로 변환하는 데 도움이 될 수 있습니다. 나는 당신이 생각할 수있는 거의 모든 플랫폼에서 사용할 수 있고 한 번에 많은 파일에서 실행할 수 있다고 생각합니다. Mac에 사용할 수있는 패키지가 있다고 생각합니다.

Phpstorm의 Diff View의 "무시 공백" 그냥 작동합니다. 운송 반환 / EOL / Newline / What-Have-You의 차이를 자동으로 무시합니다. 당신은 비전 유닉스 명령이나 그 밖의 무엇이든 시간을 낭비하거나 실제로 작동하는 무언가를 얻고 인생을 앞으로 나아갈 수 있습니다.

  • 위에서 언급 한 모든 솔루션을 사용하는 것은 Mountain Lion (정답으로 표시된 것을 포함하여)에 실패했습니다. "diff-npatch"에 대한 모든 다운로드 링크가 실패했습니다. (나는 찾았다 http://webperso.easyconnect.fr/bdesgraupes/tools.html 그러나 나는 명령 줄에서 호출 할 수없는 DIFF 도구를 사용하여 BBEDIT, SOURCETREE 또는 SMARTSVN과 같이 사용할 수있는 모든 IDE 또는 VCS 도구와 통합해야한다는 아이디어가 마음에 들지 않습니다. 그 중 BTW는 내장 DIFF 도구를 사용하여 최신을 무시하지 못했습니다.

그렇습니다. 내 신약은 r이지만 무엇입니까? arrr! 소프트웨어가 너무 어리석은 경우 r == n이라는 사실을 알기에는 다른 소프트웨어를 사용할 것입니다. ~이다 충분히 똑똑합니다.

PHPStorm은 Diff 도구가 "방금 작동"하는 유일한 소프트웨어였습니다. 이것은 Mac 소프트웨어가 기대하는 것입니다. Mac 소프트웨어가 기대됩니다 그냥 일이야. 나는 Mac을 사용하므로 매 턴마다 Arcane Terminal 명령을 배우는 대신 작업을 수행 할 수 있습니다. 거의 모든 문서화가 잘못 문서화되어 있으며 명확한 예제없이 명령이 어떻게 형식화되어야하는지 이해해야합니다. 당신은 잘못하고 있거나 명령을하고 있다면 단순히 작동하지 않습니다 다른 모든 나쁜 소프트웨어와 마찬가지로. "Man Diff"에서이 예를 들어보십시오.

   -I RE  --ignore-matching-lines=RE
          Ignore changes whose lines all match RE.

좋아, 그래서 이것을 읽었으니, 나는 그것이 무엇을 의미하는지 전혀 모른다. 사용의 예는 없습니다. "re"는 무엇입니까? 아무데도 말하지 않습니다.

그런 다음이 보석이 있습니다.

  --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

   %=     lines common to FILE1 and FILE2

   %[-][WIDTH][.[PREC]]{doxX}LETTER
          printf-style spec for LETTER

          LETTERs are as follows for new group, lower case for old group:

   F      first line number

   L      last line number

   N      number of lines = L-F+1

   E      F-1

   M      L+1

          LFMT may contain:

   %L     contents of line

   %l     contents of line, excluding any trailing newline

   %[-][WIDTH][.[PREC]]{doxX}n
          printf-style spec for input line number

          Either GFMT or LFMT may contain:

   %%     %

   %c'C'  the single character C

   %c'\OOO'
          the character with octal code OOO

나는이 구절의 의미가 없다. "입력"은 무엇입니까? 파일일까요 아니면 "to"파일 또는 "From"파일입니까? "유사한"란 무엇입니까? "문장에서" "gfmt '는'ltype 또는`changed '인가? "대체 될 수있다"는 의미가 있습니까? 그렇다면 왜 인용문이나 괄호 등에 "gfmt"가 아닌가? 사례가 없기 때문에 알 수있는 방법이 없습니다. 문서의 문구는 완전히 모호합니다. "GFMT는 포함 할 수 있습니다"는 무엇을 의미합니까? "포함"은 약어 GFMT를 대체하는 텍스트에 포함 될 수 있음을 의미합니까? 명확한 예가 없으면 완전히 쓸모가 없습니다.

당신이 너무 비밀스럽고 모호하게 만들려면 왜 남자 페이지를 쓰지 않는 이유조차도 기본적으로 소프트웨어를 사용하는 방법을 모르는 사람에게는 쓸모가 없습니까? 그 시점에서 그것은 매뉴얼이 아닙니다. 소프트웨어를 작성한 사람들을위한 빠른 참조 페이지 일뿐 아니라 사용 방법을 기억할 수 있습니다. 나는 그들이 실제로 무엇을하는지 알고 싶다면 소스 코드 자체를 읽을 것이라고 생각합니다.

내 시간은 가치가 있습니다. 차라리 돈을 지불하여 실제로 올바르게 작동하고 적절한 문서가있는 소프트웨어를 갖습니다.

이 모든 것이 실패했기 때문에 :

 diff -d --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

... r 문자를 무시하지 못했습니다.

 diff -wd --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

... r 문자를 무시하지 못했습니다.

 diff -wd --suppress-common-lines --strip-trailing-cr --ignore-all-space --from-file=rest.phtml test.phtml

... r 문자를 무시하지 못했습니다.

 diff -wd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space

... r 문자를 무시하지 못했습니다.

 diff -awd test.phtml rest.phtml --suppress-common-lines --strip-trailing-cr --ignore-all-space

... r 문자를 무시하지 못했습니다.

n 문자 인 경우 그 문제에 대해서는 n 문자가 추가 될 때도 실패했습니다.

여기서 test.phtml ==

foo

술집

and rest.html ==

foobar

"diff"명령은 항상 다음과 같은 것을 제공합니다.


* 1,2 ** ! 푸! bar 파일 끝에 Newline 없음

--- 1 ---- ! foobar 파일 끝에 No Newline

... 불합격!

단점이있는 다음의 빠른 수정을 사용했습니다 (아래 참조).

1: diff를 수행하고 파일 이름 만 나열하십시오

diff -r -q dir1/ dir2/

2: 사용 된 편집기와 함께 모든 나열된 파일을 열고 저장하면 라인 엔딩이 변경됩니다.

3: 정기적 인 차이를 수행하십시오

단점은 다음과 같습니다.

  • 덜 강력하고 오류가 발생하기 쉽습니다
  • 파일이 많으면 더 많은 작업이 있습니다

이것은 나를 위해 효과가있었습니다.

diff -r --ignore-all-space dir1/ dir2/

나는 OSX에 있고 OSX와 Windows의 혼합 파일을 가지고 있습니다. 신용 거래: http://www.codealpha.net/514/diff-and-ignoring-spaces-and-lines-inix-dos-eol/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top