linuxshell⽤sed命令在⽂本的⾏尾或⾏⾸添加字符
昨天写⼀个脚本花了⼀天的2/3的时间,⽽且⼤部分时间都耗在了sed命令上,今天不总结⼀下都对不起昨天流逝的时间啊~~~
⽤sed命令在⾏⾸或⾏尾添加字符的命令有以下⼏种:
假设处理的⽂本为test.file
在每⾏的头添加字符,⽐如"HEAD",命令如下:
sed 's/^/HEAD&/g' test.file
在每⾏的⾏尾添加字符,⽐如“TAIL”,命令如下:
sed 's/$/&TAIL/g' test.file
运⾏结果如下图:
⼏点说明:
1."^"代表⾏⾸,"$"代表⾏尾
2.'s/$/&TAIL/g'中的字符g代表每⾏出现的字符全部替换,如果想在特定字符处添加,g就有⽤了,否则只会替换每⾏第⼀个,⽽不继续往后了
linux执行shell命令例:
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⾥打开的话,所有⽂字会变成⼀⾏;⽽Windo
ws⾥的⽂件在Unix下打开的话,在每⾏的结尾可能会多出⼀个^M符号。
好了,所以我的问题就出在被处理的⽂件的每⾏末尾都有^M符号,⽽这通常是看不出来的。可以⽤"cat -A test.file"命令查看。因此当我想在⾏尾添加字符的时候,它总是添加在⾏⾸且会覆盖掉原来⾏⾸的字符。
要把⽂件转换⼀下,有两种⽅法:
1.命令dos2unix test.file
2.去掉"\r" ,⽤命令sed -i 's/\r//' test.file 好了,这样处理完,就OK啦!!!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。