FTP를 사용하여 Windows 파일을 Unix 시스템으로 보내고 ^M
개행 문자가 필요한 파일을 추가했는데 그냥 삭제하고 싶었습니다.
내가 가진 옵션 중 하나는 dos2unix
명령을 실행하는 것입니다.
그러한 패턴을 제거하는 다른 방법(예: sed
명령)을 제안할 수 있는 사람이 있습니까?
답변1
Windows 줄 끝은 두 개의 문자 시퀀스 CR, LF로 구성됩니다. CR은 캐리지 리턴 문자이며 때로는 , 등으로 \r
표현 됩니다 \015
. ^M
유닉스 줄 끝은 LF 문자입니다.
모든 Unix 변형에 존재하는 표준 유틸리티만 사용하여 Windows 줄 끝을 Unix 줄 끝으로 변환하는 방법은 다음을 사용하는 것입니다.tr
유용.
tr -d '\r' <thefile >thefile.new && mv thefile.new thefile
파일에 이미 Unix 줄 끝이 있으면 해당 내용은 변경되지 않습니다.
현재 디렉터리에 변환할 파일이 많으면 루프를 사용할 수 있습니다. 이름이 다음으로 끝나는 파일이 없다고 가정합니다 .new
.
for x in *; do
tr -d '\r' <"$x" >"$x.new" && mv "$x.new" "$x"
done
Linux(일부 임베디드 Linux 시스템 제외) 또는 Cygwin에서 다음을 사용할 수 있습니다.sed
. 파일을 내부에서 편집하는 옵션은 -i
이러한 시스템에만 적용됩니다. CR 문자 표현 \r
은 더 일반적이지만 보편적이지는 않습니다.
sed -i -e 's/\r//g' thefile
답변2
DOS2유닉스:
sed -i -r -e 's/\r$//' file
UNIX2DOS:
sed -i -r -e 's/$/\r/' file
답변3
sed -i -r -e 's/\r$//' file
"dos2unix"의 경우보다 낫습니다.sed -i -e 's/\r//g' file
후자의 경우, 고전적인 Mac 스타일 파일(개행 문자가 '\r'인 경우)에서 실행하면 새 파일은 Unix 스타일이 아닐 뿐만 아니라 개행 문자도 전혀 없습니다. 모든 것이 정렬됩니다.
편집: 다시 한 번 주석에서 언급했듯이 sed 's/^M//g' file
^ 기호는 줄 시작 부분의 sed 코드이므로 줄 시작 부분의 모든 M을 제거하므로 sed를 사용하는 것이 좋습니다. 앞에 M만 있는 여러 줄이 있는 텍스트 파일을 만들었고 해당 sed 명령을 사용하면 개행 외에는 아무것도 출력되지 않았습니다.
답변4
사용sed:
sed 's/^M//g' filename > newfilename