1. 程式人生 > >windows和linux下換行符區別

windows和linux下換行符區別

把windows下換行符轉換為linux下換行符

python環境下有一個很簡單的解決方法:

#!usr/bin/env python
#coding: utf-8
import sys, pprint
import os


def main():
    print 'Hello world!'
    line1 = "echo 'Hello!'\r\necho 'Thanks!'"
    print line1
    line2 = line1.replace('\r\n', '\n') # windows下換行符為\r\n,linux下換行符為\n,還有python中str的replace方法類似於java中String的replaceAll方法,全域性替換
    print line2

if __name__ == '__main__':
    main()


windows(dos)下的換行符 和 linux (ubuntu)下的換行符是不同的。

在涉及到DOS下的文字 在LINUX下 操作時,就涉及到換行符不同帶來的麻煩。

,在DOS使用的換行符為 ^M$,我們稱為CR與LF兩個符號。而在Linux中,則僅有LF ($) 這個換行符。這個換行符對於

Linux的影響很大。 我們說過,在開始執行Linux命令時,它的判斷依 據是“Enter”,而Linux的Enter為LF符號。不過,

由於DOS的換行符是CRLF,就是多了一個 ^M的符號,在這樣的情況下,如果是一個shell指令碼的程式檔案,將可能造

成“程式無法執行”的狀態,因為它會誤判程式的命令內容。

怎麼辦?很簡單,將格式轉換為Linux即可。要以vi進入該檔案,然後一個一個地刪除CR嗎?當然不是。我們可以通過

簡單的命令來進行格式的轉換。

dos2unix

通過man 查詢命令使用語法

因為換行符以及DOS與Linux作業系統中一些字 符的定義不同,因此,建議不要在Windows系統中將檔案編輯好之後,

才上傳到Linux系統,這樣容易發生錯誤。而且,如果在不同的系統之間複製一些 純文字檔案時,

千萬要使用unix2dos或dos2unix來轉換格式。

CR, LF, CR/LF是不同作業系統上使用的換行符.
Dos和windows採用回車+換行CR/LF表示下一行, 
而UNIX/Linux採用換行符LF表示下一行,
蘋果機(MAC OS系統)則採用回車符CR表示下一行.
CR用符號'/r'表示, 十進位制ASCII程式碼是13, 十六進位制程式碼為0x0D; 
LF使用'/n'符號表示, ASCII程式碼是10, 十六製為0x0A.
所以Windows平臺上換行在文字檔案中是使用 0d 0a 兩個位元組表示, 而UNIX和蘋果平臺上換行則是使用0a或0d一個位元組表示.


一般作業系統上的執行庫會自動決定文字檔案的換行格式. 如一個程式在windows上執行就生成CR/LF換行格式的文字檔案,

而在Linux上執行就生成LF格式換行的文字檔案.
在一個平臺上使用另一種換行符的檔案檔案可能會帶來意想不到的問題, 特別是在編輯程式程式碼時. 有時候程式碼在編輯器中

顯示正常, 但在編輯時卻會因為換行符問題而出錯.
很多文字/程式碼編輯器帶有換行符轉換功能, 使用這個功能可以將文字檔案中的換行符在不同格式單互換.
在不同平臺間使用FTP軟體傳送檔案時, 在ascii文字模式傳輸模式下, 一些FTP客戶端程式會自動對換行格式進行轉換. 經過

這種傳輸的檔案位元組數可能會發生變化. 如果你不想ftp修改原檔案, 可以使用bin模式(二進位制模式)傳輸文字.

標誌 符號 十進位制Asscii碼數                    十六進位制數                              

CR

/r                           13   0x0D
LF /n  10 0x0A
標誌 Win/Dos linux,Unix等
換行 /r/n     (<CR><LF>)                 /n       (<LF>)        

CRLF的含義是“carriage return/line feed”,意思就是回車。這是兩個ASCII字元,分別排在第十三和第十位。CR和LF是在計算機終端還是電傳印表機的時候遺留下來的東西。電傳打字機 就像普通打字機一樣工作。在每一行的末端,CR命令讓列印頭回到左邊。LF命令讓紙前進一行。雖然使用捲紙的終端時代已經過去了,但是,CR和LF命令依 然存在,許多應用程式和網路協議仍使用這些命令作為分隔符。


Ubuntu安裝dos2unix命令

Ubuntu系統開啟Windows下生成的文字檔案,會在每行的末尾出現’^M

原因就是Windows和Linux的回車符是不同的

在Windows下回車符是\r\n回車換行

在Linux下回車符是\n

最簡單、最常用的解決方法是使用dos2unix命令轉換:dos2unix filename

Ubuntu下dos2unix和unix2dos命令在tofrodos包中

安裝:apt-get install tofrodos

安裝完之後用dos2unix和unix2dos發現還是不能用,原來是Ubuntu10.04裡已經不再用這個命令啦,

$ dpkg -L tofrodos
/.
/usr
/usr/bin
/usr/bin/fromdos
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/fromdos.1.gz
/usr/share/doc
/usr/share/doc/tofrodos
/usr/share/doc/tofrodos/NEWS.Debian.gz
/usr/share/doc/tofrodos/tofrodos.html
/usr/share/doc/tofrodos/copyright
/usr/share/doc/tofrodos/changelog.Debian.gz
/usr/share/doc/tofrodos/readme.txt.gz
/usr/bin/todos
/usr/share/man/man1/todos.1.gz

可以看出,改成todos和fromdos了,在Ubuntu網站上http://packages.ubuntu.com/zh-cn/jaunty/tofrodos對tofrodos有如下解釋:
Tofrodos comprises one program, "fromdos" alias "todos", which converts text files to and from these formats. Use "fromdos" to convert DOS text files to the Unix format, and "todos" to convert Unix text files to the DOS format.
這裡是對fromdos和todos用法的介紹。這兩個命令還是比較容易記的,也好理解,更加人性化。

但是有些地方不得不用老的命令dos2unix和unix2dos,怎麼辦呢?以下引自一篇文章:
http://blog.csdn.net/HandonFeng/archive/2010/05/08/5569186.aspx  大家可以嘗試下:

解決方案之一是下一個busybox編譯,然後自己建個符號連線。

我用的是busybox1.15.2,裡面包含的了這兩個命令:

$ ./busybox
BusyBox v1.15.2 (2010-03-22 11:29:01 CST) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: function [arguments]...

    BusyBox is a multi-call binary that combines many common Unix
    utilities into a single executable.  Most people will create a
    link to busybox for each function they wish to use and BusyBox
    will act like whatever it was invoked as!

Currently defined functions:
    [, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk, basename, beep, blkid,

    brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd,

    chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw,

    cttyhack, cut, date, dc, dd,  deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay,

    diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo,

    ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset,

    fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs,  fold, free, freeramdisk, fsck, fsck.minix,

    fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm, head,

    hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd,

    ifup, inetd, init, insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule,

    iptunnel, kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln,
    loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod,

    lzmacat, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg, microcom,

    mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp,

    modprobe, more, mount, mountpoint, msh, mt, mv, nameif, nc, netstat, nice, nmeter,

    nohup, nslookup, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress,

    pivot_root, pkill, popmaildir, poweroff, printenv, printf, ps, pscan, pwd, raidautorun, rdate,

    rdev, readahead, readlink, readprofile, realpath, reboot, reformime, renice, reset, resize, rm,

    rmdir, rmmod, route, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay,

    sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid,

    sh, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, softlimit, sort, split,
    start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon,

    switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd,

    time, timeout, top, touch, tr, traceroute, true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd,

    umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unlzop, unzip, uptime,

    usleep, uudecode, uuencode, vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which,

 who, whoami, xargs, yes, zcat, zcip

相關推薦

windowslinux區別

把windows下換行符轉換為linux下換行符 python環境下有一個很簡單的解決方法: #!usr/bin/env python #coding: utf-8 import sys, pprint import os def main(): print '

windowslinux的轉換

windows 檔案的換行符為:[CR][LF] Linux和Unix檔案的換行符為:[LF] 有些需要轉換使用,如修改或替換安卓andriod的hosts檔案,需要保證換行符為Unix形式才能使用。 其中一種辦法是在linux系統中重新儲存一份檔案;

windowslinux^M轉換刪除

問題現象:Windows下的文字檔案換行符是\r\n,Linux下的換行符是\n,在Linux下vim開啟Windows的文字檔案,在行尾會顯示^M字元,影響配置檔案的閱讀,嚴重的會影響shell指令碼的執行。問題確認:1:file filename可以提示檔案中存在CRLF

Linux 轉換

Linux和Windows和換行符不一樣。 Windows下是CRLF(\r\n或0d0a),Linux下是LF(\n或0a)。在Linux下有時會遇到從Windows過來的文字檔案,這些檔案帶了Windows換行符,Linux下進行指令碼處理時有可能會出一些

windowslinux的一些常用區別

1)標頭檔案 windows下winsock.h/winsock2.h linux下sys/socket.h 錯誤處理:errno.h  2)初始化 windows下需要用WSAStartup #if defined(WIN32) WORD wVersionRe

windowslinux讀取檔案的一個坑——\r\n\n

      拿同事的一個windows下的C程式,在Linux下跑,結果不正確。定位為讀取.ini配置檔案錯誤。該配置檔案是在windows下編輯的,網上查到資料,說是windows和linux下對換行符處理不同導致的。      

回車區別WindowsLinux區別

回車符號和換行符號產生背景  關於“回車”(carriage return)和“換行”(line feed)這兩個概念的來歷和區別。 在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字元。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正

WINDOWSLINUX,MAC系統區別

'\r'是回車,前者使游標到行首,(carriage return)'\n'是換行,後者使游標下移一格,(line feed)\r 是回車,return\n 是換行,newline對於換行這個動作,unix下一般只有一個0x0A表示換行("\n"),windows下一般都是0

git windows問題 LF與CRLF轉換

在各作業系統下,文字檔案所使用的換行符是不一樣的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),後來的 OS X 在更換核心後與 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRL

windowslinux多執行緒的一些區別

我認為linux的多執行緒不如windows。理由如下:一、功能WaitForSingleObject在linux下可以用pthread_cond_wait來替代實現,但是pthread_cond_wait不能用來等待thread handle。要等待thread handl

跨平臺開發CRLFLF的問題

在跨平臺下開發應用,首先應該考慮的是各種相容性的問題,這裡討論在windows和linux下聯合開發而導致換行符不相容的問題: linux作業系統下的換行符為/n,而windows作業系統下的換行符則為/r/n,這導致在程式執行的時候會出現一些問題,下面舉個我遇到的問題和解

git windows問題

背景 在各作業系統下,文字檔案所使用的換行符是不一樣的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),後來的 OS X 在更換核心後與 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作

windowsLinux定時啟動或關閉服務

ref sta article start 處理程序 window pin blog win http://blog.csdn.net/clare504/article/details/17410643 1、Windows下的定時啟動程序可以采用系統的計劃和任務,定時

修改windows文件的

系統 二進制 light bash 應用場景 python col orm root 應用場景: 在辦公中,有可能存在,某些命令腳本使用windows下的文本編輯器進行編寫 當放到測試環境的Linux中時,運行報錯   需要使用的軟件:xxd hexdump

windowslinux的抓包工具

gpo tcpdump linu window clas dst post blog windows Linux 抓包工具 tcpdump 示例 tcpdump -i bond0 host 10.70.11.182 -w ./sms.cap windows抓包

Linux刪除-

換行符場景:使用nmap結合for循環對文本內的ip進行檢測時,發現每行ip後面有個\r的換行符影響shell腳本執行 解決方案:使用vim編輯器做替換:使用vim -v file //打開文件 執行下面的替換命令 :%s/\r//處理後再次打開如下:Linux刪除換行符-

windows的java項目打jar分別編寫在windowslinux的腳本( 本人親測可用!)

總結 有一個 ack unzip next 技術 方法 MF .bat 前言: 最近公司做了一個工具,要將這個工具打包成一個可運行的程序,編寫start.bat和start.sh在windows和linux下都可以運行。 在網上找了很多資料,最後終於找到一個可靠的資料,記錄

windowsLinux安裝nodejs

兩個文件 tro window 顯示 name 測試 分享 如圖所示 運行 在windows下安裝nodejs 1.首先下載nodejs安裝包, https://nodejs.org/en/download/ 點擊下載相應的版本 然後將文件夾解壓到安裝目錄(任

python在windowslinux的安裝配置

str net .net cat ria 技術 連接 top 成功 一、windows下安裝python3.6 安裝編輯器:Ecplise+pydev插件 Eclipse是寫JAVA的IDE, 這樣就可以通用了,學習代價小。 學會了Eclipse, 以後寫Pytho

ffmpeg windowslinux轉換格式

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList;