vim中显示windows或者dos的换行符^M
http://blog.chinaunix.net/uid-14214482-id-3220695.html
linux下,如果需要在vim中查看^M,需要使用如下命令:e ++ff=unix % 。
有时候,我们在 Linux 中打开曾在 Win 中编辑过的文件时,会在行尾看到 ^M字符。虽然,这并不影响什么,但心里面还是有点不痛快。如果想要删除这些 ^M 字符,可以使用 Vim 来轻松搞定它。
在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符。
^M 注意要用 Ctrl + V Ctrl + M 来输入
Linux、windows下回车换行格式转换回车换行结尾转换
http://rocolex.blog.163.com/blog/static/6844641020115241629669/
一、windows的文件到linux下的转换方法:
1. 用sed命令替换
sed -e 's/^M//g' original.txt > target.txt (注意^M 在Linux/Unix下是这样输入的:先按CTRL+v,接着按CTRL+SHIFT+m,呵呵~~ 其实俺主要就是为了记录一下这个输入方法)
2. 在vi中替换
:%s/^M//g
3.sed命令替换
sed -e 's/.$//' dos.txt > linux.txt
二、Linux文本传到windows系统,转换方法:
sed -e 's/$/\r/' 1pnet.txt >dos.txt
while read的关于读取最后一行的问题
http://bbs.csdn.net/topics/390108418
windows使用\r\n作为行结尾,而unix使用\n作为行结尾
使用notepad编辑的文件,如果最后一行没有回车,采用二进制方式上传到unix后,因为最后一行没有\n,会被认为是不完整的文件
循环读到最后一行后,认为达到文件结尾,那个read SERVER会返回假,循环结束。
1、最好使用dos2unix命令转换为unix格式
2、实在不行,只能在while循环之后,再添加一个额外处理
[shell] while read line最后一行读不出
http://wangjunle23.blog.163.com/blog/static/11783817120135254317901/
如果存在一个文本${file},使用while read line去读取时发现,最后一行无法读出:
while read line
do
echo "$line 1 n"
done < ${file}
如何解决这种情况呢,可以考虑以下的方法:
DONE=false
until $DONE
do read || DONE=true
echo "$REPLY 1 n"
done < ${files}