本文虽然题目是这样写的,但是并不仅仅有这两种.至少我还知道另外一种,mac格式.不过本文只讨论这两种,另外一种可参考这两种做出处理.
今天看了一个脚本,完全都没有问题,但是就是运行不过去.总是提示 syntax error near unexpected token `$‘\r‘‘ 令人百思不得其解.其实看了字面的意思也能大致明白错误的原因.但是不知道解决的办法.幸好有度娘.
其实问题的根源作于文本格式,在我一直纠结的过程中却忽略掉了一个重要的问题.
dos文本格式 : 换行是\r\n
unix文本格式 : 换行是\n
也就是说,这个文本其实是dos格式的.纠结了半个消失这个细节.实在惭愧.那么怎么做才能瞬间知道一个文本的格式呢.
仅仅说一下在linux下的做法.当然可能考虑的还不是很全面,有不一样的答案的同学,可以补充,在此谢谢.
1. cat -A 文件名 -A选项的意思是把所有的可打印和不可打印的字符都想方设法的打印出来.如果发现末尾有个^M.那就说明这是个dos格式的文本.
2. 用vim打开,然后在底行的模式下(即冒号模式)执行set fileformat , 就可以查看这个文本当前的格式了.
3. 还有一种方式,vim可能默认都可以正常显示dos和unix,不会让用户看到不该看的.那么我们可以在冒号模式下set fileformats=unix , 然后再在冒号模式下执行edit(作用即为刷新).此时如果每一行末尾都出现了^M,那么说明文件格式为dos的.
现在我们知道怎么去鉴别格式问题了.那么怎么去修改呢.网上给出了一个比较复杂的方式
1. sed -i s/^M//g 这个命令行不行呢,没有问题,只是千万别直接敲shift+6 shift+m.这样是不对的,正确的做法是ctrl+v ctrl+m .只有这样执行才能得到想要的结果.-i的意思就是直接替换原文.
2. dos2unix 偷懒可以用这种方式.一个命令直接搞定.不需要去了解sed也不需要去判断什么文本格式,我管你什么格式.
3. 冒号模式下执行set fileformat=unix 也可以搞定.
4. 很多人说可以在冒号的模式下使用% s/^M//g,但是其实则是不行的,这个生效的前提是当前vim的fileformat是unix,如果是dos就不可以.前面的^M同1的键入方式.
再运行脚本,ok.
可能上面的总结并没有那么全面.不过对于使用而言,已经足够了.