(一)最近在学习shell编程,可是在《Linux程序设计》指定的网站上下载了源码,使用的时候却一直出问题。提示:”bash: ./here1:/bin/sh^M:损坏的解释器: 没有该文件或目录“。之后用vi编辑器打开文件,发觉每一行的最后有浅蓝色的字符'^M'。才知道了问题所在
创新互联公司-专业网站定制、快速模板网站建设、高性价比城子河网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式城子河网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖城子河地区。费用合理售后完善,十多年实体公司更值得信赖。
其实并没什么奇怪的,出现这种错误的原因是因为Linux和Windows文本文件的行结束标志不同。在Linux中,文本文件用"
"(0a)表示回车换行,而Windows用"\r
"(0d 0a)表示回车换行。所以在Linux中使用Windows的文本文件常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"\r
"转化成"
",unixtodos把"
"转化成"\r
"。
命令dos2unix和unix2dos的使用非常简单,格式为:dos2unix filename
如果想更多的了解这两个命令,可以查看手册:
man dos2unix
它会告诉你dos2unix的高级用法(二)Ubuntu下默认没有安装dos2unix工具,而且也没有一个叫这个名字的工具(我在solaris里用过dos2unix,不知道为啥Ubuntu没有)。但是有一个替代工具——tofrodos , 下面就说一下它的安装和使用。
当然还是apt安装啦。
(1)安装tofrodos
sudo apt-get install tofrodos
实际上它安装了两个工具:todos(相当于unix2dos),和fromdos(相当于dos2unix)
安装完即可,现在你已经可以进行文本格式的转换啦。
比如: todos Hello.txt (即unix2dos Hello.txt)
fromdos Hello.txt (即dos2unix Hello.txt)
(2)做一些优化
由于习惯了unix2dos和dos2unix的命令,可以把上面安装的两个工具链接成unix2dos 和dos2unix,或者仅仅是起个别名,并放在启动脚本里。
步骤:以下是代码片段:
ln -s /usr/bin/todos /usr/bin/unix2dos
ln -s /usr/bin/fromdos /usr/bin/dos2unix
或者在 ~/.bashrc里起个别名
添加 alias unix2dos=todos alias dos2unix=fromdos(三)另外如果要在目录中大量替换, 可以使用find + xargs比如:find ./model -name *.sh | xargs fromdos
去掉文件中的换行符
(1)tr命令的操作是针对文件的操作,它把整个文本当做操作的对象,所以可以直接去除文件中的换行符
tr '\n' ' ' file
(2)sed的操作对象是行.而作为行分割符号的回车符,本身是不属于行的.所以sed中必须加上N命令,把下一行的内容添加到当前的pattern space中,这样实际上是把相邻的2行合并了.下一次仍然是先n,再p,再N,开始新的轮回:
cat file | sed 'N;s/\n/ /'
所以上面的语句是不能把文件内容合并为一行的,到底该怎么写,我暂时没有想到,呵呵
(3)直接用awk
awk '{printf("%s ",$0)}' file
(4)当然,用echo也是可以的:
while read line;do echo -n "$line"; done awk_help.txt, 这样,可以把awk_help.txt的内容合并为一行
sed -e "s#\[/r][/r][/n]#\[/r][/n]#g" file
1、用VIM查看文件编码
在Vim 中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。
2、 改写~/.vimrc 文件
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
3、 用ICONV文件编码转换
我们利用iconv工具对文件的编码进行转换。
iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个GBK 编码的文件转换成UTF-8编码
iconv -f GBK -t UTF-8 file1 -o file2
其中的参数的意义表示
-f From 某个编码
-t To 某个编码
-o 输出到文件
4、 通过记事本另存为来改变文件编码;
既用Windows下的记事本打开,选择另存为……,改变编码即可。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款