[windows] 줄 끝 유지

sed를 실행하여 Windows에서 일부 대체 작업을 수행했는데 자동으로 줄 끝이 Unix (\ n)로 변환된다는 것을 알았습니다. sed에게 Windows 줄 끝 (\ r \ n)을 사용하도록 지시하거나 파일에서 줄 끝을 보존하는 것이 더 나은 옵션이 있습니까?

참고 : 저는 unxutils에서 sed를 사용합니다 : http://unxutils.sourceforge.net/



답변

-bsed에 대한 옵션을 사용하여 파일을 바이너리로 처리 할 수 있습니다 . 이것은 Windows에서 cygwin의 sed 문제를 해결할 것입니다.

예: sed -b 's/foo/bar/'

줄 끝을 일치 시키려면 선택 사항 인 캐리지 리턴을 일치, 캡처 및 복사해야합니다.

예: sed -b 's/foo\(\r\?\)$/bar\1/'

로부터 나오지 man 페이지 :

-b-바이너리

이 옵션은 모든 플랫폼에서 사용할 수 있지만 운영 체제가 텍스트 파일과 이진 파일을 구분하는 경우에만 효과적입니다. MS-DOS, Windows, Cygwin의 경우처럼 이러한 구분이 이루어지면 텍스트 파일은 캐리지 리턴과 줄 바꿈 문자로 구분 된 줄로 구성되며 sed는 끝 CR을 볼 수 없습니다. 이 옵션을 지정하면 sed는 입력 파일을 바이너리 모드로 열므로이 특수 처리를 요청하지 않고 줄 바꿈으로 끝나는 줄을 고려합니다 .`


답변

다음 과 같이 기존 스크립트 끝에서 \nfor 를 구독 할 수 \r\n있습니다.

sed 's/foo/bar/;s/$/\r/'

또는 아마도

 sed -e 's/foo/bar/' -e 's/$/\r/'

위의 두 가지 방법 중 어느 것도 작동하지 않는 sed경우 해당 옵션이 있는지 확인하려면 해당 버전의 특정 매뉴얼 페이지 를 참조해야합니다. 의 * nix 버전은 sed그렇게 하라는 지시없이 줄 종결자를 변경 하지 않습니다 .

또 다른 대안은 사용하는 것입니다 cygwin버전 sed있는 이 바람직하지 않은 동작을합니다.


답변

또는 (cygwin 버전) perl -pe에는이 문제가없는 것 같습니다.


답변

-b 스위치와 리디렉션 만 지정하면 Gnuwin이 줄 바꿈 (win-> unix)을 엉망으로 만들 수 있습니다. -i (인라인) 스위치를 사용하면 엉망이됩니다.

예 : sed.exe -b “s / \ xFF \ xFE //”c : \ temp \ in.csv> c : \ temp \ out.csv


답변

나는 것으로 나타났습니다 sed-4.4.exe에서 https://github.com/mbuilov/sed-windows 그것은 순수한 승리

  • 기본 모드에서 Windows CRLF 줄 끝을 사용합니다.
  • -b모드 에서 원래 줄 끝을 유지 합니다.
  • 내부 -i모드 에서 올바르게 작동합니다.
  • 같은 -z과 모드를 \0분리 문자 대신 \n하는 때때로 편리 할 수

참조 나오지 옵션 목록포트 나오지 모든 창의 목록을 .

참고 것을 gnuwin32 4.2.1이 나오지 않는 손상 행 끝 에서 -bi모드가없는 -z전혀 모드.


답변