# WINDOWS和UNIX换行符的理解

**file1.txt**
17.143.161.37   其他    美国
54.163.255.40   其他    美国 弗吉尼亚州 亚马逊公司

**[root@localhost home]# cat -v file2.txt | head**
> -v, --show-nonprinting
              use ^ and M- notation, except for LFD and TAB -v, --show-nonprinting  use ^ and M- notation, except for LFD and TAB
              
17.143.161.37   M-eM-^EM-6M-dM-;M-^V    M-gM->M-^NM-eM-^[M-=^M
54.163.255.40   M-eM-^EM-6M-dM-;M-^V    M-gM->M-^NM-eM-^[M-= M-eM-<M-^WM-eM-^PM-^IM-eM-0M-<M-dM-:M-^ZM-eM-7M-^^ M-dM-:M-^ZM-iM-)M-,M-iM-^@M-^JM-eM-^EM-,M-eM-^OM-8^M
可以看到在每行的末尾有个^M

    while read line
    do
            ip=`echo $line | awk '{print $1}'`
            echo "---------> "$line
            delay=`ping -c 1 -W 1 "${ip}" | grep "bytes from" | cut -d " " -f 7 | cut -d "=" -f 2`
            echo $line"     "${delay} >> delay.log
    done < ipdata.txt 

但是没有显示想要的结果,时延反而打在每行的开头。结果如下:
28158.178 其他 美国
26287.7 其他 比利时
74.852.57 其他 韩国

## 原因
   ipdata.txt文件是从windows主机copy到linux主机,且采用windows格式,所以怀疑是文件格式问题导致,将文件格式更改为unix格式后,脚本运行正常。
217.79.179.106 其他 德国    372
200.73.229.105 其他 巴西    440
62.182.67.244 其他 乌克兰    404

### WINDOW & LINUX的换行区别
Text files created on DOS/Windows machines have different line endings than files created on Unix/Linux

DOS uses carriage return and line feed ("\r\n") as a line ending,     CRLF ( \r\n ,  0D 0A )
which Unix uses just line feed ("\n").    LF ( \n ,  0A ).

0D CR (carriage return)  回车键  displayed "^M" in Unix and Linux.

所以脚本中此条命令echo $line"     "${delay} >> delay.log
读取完$line后每行后面多了个\r,表示回车,即回到每行的行首,所以${delay}会在行首覆盖显示

#### 历史
  早期的计算机输出设备不是显示器,而是电传打字机,结构与普通的打字机差不多。有一个打印头在纸上打字,同时有一个电动机控制纸张的进出。当打印头到达行尾的时候,需要两个动作才能够到达下一行的行首:首先执行回车动作,将打印头移动到本行的行首,然后进行换行动作,电动机将纸张向上移动一行,这样打印头就处于下一行的行首,可以继续进行打印。回车和换行对应的控制字符分别是\r和\n,这就是windows中换行符为\r\n的由来。后来由于经常连续执行,所以在打印机中将这两个控制字符简化为一个控制字符,这就是linux/unix中的换行符\n的由来。
  
#### 解决
In [vim](http://www.vim.org/), use `:set ff=unix` to convert to Unix; use `:set ff=dos` to convert to Windows.

WINDOWS和UNIX换行符的理解的更多相关文章

  1. linux下与windows下的换行符

    [原文有些许错误,已作了修改] 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传 ...

  2. Linux文件和windows文件在 换行符的区别

    Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结 ...

  3. windows与linux换行符

    我一次linux上写的脚本,利用vim进行脚本编写,然后下载下来在nodepad++上面打开,在nodepad上面新建了一个文件将原来文件内容复制过去,保存后下载复制文件在linux上面进行运行,发现 ...

  4. 修改windows文件的换行符

    应用场景: 在办公中,有可能存在,某些命令脚本使用windows下的文本编辑器进行编写 当放到测试环境的Linux中时,运行报错 需要使用的软件:xxd hexdump  dos2unix 1.运行w ...

  5. Linux中使用Vim快速更换文档中Windows换行符为Linux平台

    一.简述 平时我们把Windows编写好的sh文件放在linux上跑时,经常出现换行符的问题.快速切换的解决方法如下: 二.解决 vim test.sh :set ff? 如果出现fileforma= ...

  6. git在不同平台windows、linux、mac 上换行符的问题

    0.01 不同平台上换行符的问题 1,不同平台对换行符的制定不同 windows <回车换行> (carriage return AND line feed) “\n\r” CRLF Un ...

  7. windows和linux中换行符的转换

    数据开发平台使用上传脚本报错:保存失败,文件编码格式不正确,请修改文件换行符为Unix终束符! 修改方式:DOS系统下,使用文本编译器另存为,然后选择换行符为unix终束符. 解释: windows ...

  8. windows配置换行符

    CR.LF.CR/LF为不同操作系统上使用的换行符: Windows/DOS系统:采用CR/LF表示下一行: Unix/Linux系统:采用LF表示下一行: Mac OS系统:采用CR表示下一行: M ...

  9. Linux换行符和Windows换行符的区别与转换

    不同系统文本文件的行尾换行符不同:    Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法)    Linux为一个换行'\n'    Mac为一个 ...

随机推荐

  1. Android音频文件浏览+音频播放

    该Demo执行后,会显示全部你sd卡上的音乐文件列表, 并能够点击列表选择某一首歌曲进行播放. 执行效果: 点击download出现: 然后点击歌曲调用系统播放器播放. 源码: activity_au ...

  2. jquery如何判断表格同一列不同行input数据是否重复

    function hasRepeat(objId,columnIndex){ var arr = []; $("#"+objId+" tbody tr").ea ...

  3. 将几何画板x轴坐标值换成弧度制的方法

    大家在学习数学的过程中,都会遇到函数,这个时候大家都会遇到函数图像.对于函数图像我们一般都会通过先建立坐标系,然后让图像呈现在坐标系中.函数的种类有很多,三角函数就是其中之一,在绘制三角函数图像时,我 ...

  4. 【转】VC++计算当前时间点间隔N天的时间(不使用CTimeSpan类)

    转自:http://blog.csdn.net/fzuim/article/details/61199351 涉及到有效期的设置,需要计算N天时间间隔的时间.  C++ Code  123456789 ...

  5. 提高PHP编程技术的方法

    提高PHP编程技术的方法 下面介绍的是提高PHP编程技术的几种方法. 1.PHP标签 我知道有些人写PHP代码的时候喜欢用缩略标签<? ?>,但是这可不是个好习惯,因为缩略标签在有些服务器 ...

  6. 面试之JavaWeb篇(十三)

    148,AJAX有哪些有点和缺点? 优点: 1.最大的一点是页面无刷新,用户的体验非常好. 2.使用异步方式与服务器通信,具有更加迅速的响应能力. 3.可以把以前一些服务器负担的工作转嫁到客户端,利用 ...

  7. 爬虫入门【11】Pyspider框架入门—使用HTML和CSS选择器下载小说

    开始之前 首先我们要安装好pyspider,可以参考上一篇文章. 从一个web页面抓取信息的过程包括: 1.找到页面上包含的URL信息,这个url包含我们想要的信息 2.通过HTTP来获取页面内容 3 ...

  8. pip install selenium==版本号 报错

    安装selenium是注意不要带版本号直接用如下命令: pip install selenium

  9. jQuery获取textarea中的文本

    今天出了一个bug,用$("#textareaid").text()获取textarea中的信息在IE下没问题,在火狐中居然获取不到信息,经过查阅资料才发现,应该用$(" ...

  10. iOS微信打开App

    传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Scheme方式微信内置的浏览器都是封锁了所有它投资的公司之外的,只有 ...