IT

행 끝 유지

itgroup 2023. 4. 18. 22:30
반응형

행 끝 유지

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

주의: unxutils의 sed를 사용하고 있습니다.http://unxutils.sourceforge.net/

를 사용할 수 있습니다.-b파일을 바이너리로 처리하도록 sed 옵션을 지정합니다.그러면 Windows의 sygwin sed 문제가 해결됩니다.

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

줄의 끝부분을 일치시키려면 캐리지 리턴(옵션)을 일치시키고 캡처하여 복사해야 합니다.

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

sed man 페이지에서:

-b --표준

이 옵션은 모든 플랫폼에서 사용할 수 있지만 운영 체제가 텍스트 파일과 이진 파일을 구분하는 경우에만 유효합니다.MS-DOS, Windows, Cygwin의 경우와 같이 텍스트파일은 캐리지 리턴과 줄바꿈 문자로 구분된 행으로 구성되며 sed는 끝 CR을 인식하지 않습니다.이 옵션을 지정하면 sed는 입력 파일을 바이너리 모드로 오픈하기 때문에 이 특별한 처리를 요구하지 않고 라인피드로 끝나는 행을 고려합니다.`

이 모든 것들을\n위해서\r\n기존 스크립트의 마지막에 다음과 같이 표시됩니다.

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

또는 아마도

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

위의 두 가지 중 어느 것도 동작하지 않는 경우는, 사용의 버전의 man 페이지를 참조할 필요가 있습니다.sed그런 옵션이 있는지 확인합니다.*nix 버전은sed지시 없이 회선 터미네이터를 변경하지 마십시오.

또 다른 대안은 다음과 같이 하는 것입니다.cygwin버전sed이런 바람직하지 않은 행동을 해서는 안 됩니다.

또는 (의 sigwin 버전)perl -pe이 문제는 없는 것 같습니다.

-b 스위치와 리다이렉트만 지정하면 Gnuwin을 억제하여 새로운 회선(win->unix)을 혼란시킬 수 있습니다.-i(인라인) 스위치를 사용하면 문제가 발생합니다.

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

나는 그것을 발견했다.sed-4.4.exefrom https://github.com/mbuilov/sed-windows은 완전한 성공입니다.

  • 는 디폴트 모드에서 Windows CRLF 회선 엔딩을 사용합니다.
  • 원래 행의 끝을 보존하다-b모드
  • 사내에서 올바르게 동작합니다.-i 전환
  • also 、 offers offers offers 도 준비되어 있습니다.-z를 지정합니다.\0 \n때로는 편리할 수도 있습니다.

sed 옵션 목록모든 Windows sed 포트 목록참조하십시오.

gnuwin32 sed 4.2.1 은, 로 의 엔딩이 파손되어 있는 것에 주의해 주세요.-bi 「」를 않습니다.-z모드를 선택합니다.

언급URL : https://stackoverflow.com/questions/4652652/preserve-line-endings

반응형