用sed命令在行首或行尾添加字符的命令有如下几种:mysql
假设处理的文本为test.filelinux
在每行的头添加字符,好比"HEAD",命令以下:sql
sed 's/^/HEAD/g' test.file数据库
在每行的行尾添加字符,好比“TAIL”,命令以下:windows
sed 's/$/TAIL/g' test.fileunix
运行结果以下图:test
几点说明:sed
1."^"表明行首,"$"表明行尾file
2.'s/$/TAIL/g'中的字符g表明每行出现的字符所有替换,若是想在特定字符处添加,g就有用了,不然只会替换每行第一个,而不继续日后找了方法
例:
3.若是想导出文件,在命令末尾加"> outfile_name";若是想在原文件上更改,添加选项"-i",如
4.也能够把两条命令和在一块儿,在test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令:sed '/./{s/^/HEAD/;s/$/TAIL/}' test.file
以上其实都还OK,昨天花太多时间,主要由于被处理的文件是用mysql从数据库提取的结果导出来的,别人给我以后我就直接处理,太脑残了= -我一直有点怀疑之因此结果不对,有多是windows和linux换行的问题,但是由于对sed不熟,就一直在搞sed。。。。。。。
众所周知(= -),window和linux的回车换行之云云,若是你知道了,跳过这一段,不知道,读一下呗:
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,全部文字会变成一行;而Windows里的文件在 Unix下打开的话,在每行的结尾可能会多出一个^M符号。
好了,因此个人问题就出在被处理的文件的每行末尾都有^M符号,而这一般是看不出来的。能够用"cat -A test.file"命令查看。所以当我想在行尾添加字符的时候,它老是添加在行首且会覆盖掉原来行首的字符。
要把文件转换一下,有两种方法:
1.命令dos2unix test.file
2.去掉"\r" ,用命令sed -i 's/\r//' test.file
好了,这样处理完,就OK啦!!!