zoukankan      html  css  js  c++  java
  • WINDOWS和UNIX换行符的理解

    # 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 (" ") as a line ending,     CRLF (   ,  0D 0A )
    which Unix uses just line feed (" ").    LF (   ,  0A ).

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

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

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






  • 相关阅读:
    IOS 两种控制器的使用,纯代码UITabBarController 与 UINavigationController
    iOS UI控件总结(全)
    IOS 参数string 转成url
    CocoaPods 的使用与一些异常情况的处理
    创建自己的 FrameWork(含demo)-Xcode7环境
    UITextView 一些属性的设置
    跳转第二弹
    iOS--登录注册页面-趣享-接口设计
    《大道至简》第一章阅读笔记
    软件工程个人作业02
  • 原文地址:https://www.cnblogs.com/roni/p/6207743.html
Copyright © 2011-2022 走看看