参考:http://man.linuxde.net/sed
本次使用Python的模块进行window和linux的交互,在发送文件给linux时出现了乱码的问题。将里面内容修改一样也没用,设置编码?都是utf-8了,那么还有什么问题?
除了编码,还有回车?!
这里window的文件的回车是\r\n,我先在window中写入了‘\n’,实际上保存时都是'\r\n',这样一来,在发送到linux中就有问题了。如何快速的替换呢?使用sed~
sed是什么?
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
本次使用的命令是:
sed -i 's/\r//' $FILE$
1.这里的 "-i"表示直接把FILE文件修改掉了
2.‘s/str1/str2/’:这是最基础的替换表示
3.'s表示替换,/是定界符,第一个之后的是需要替换的,第二个是之后的是替换成的内容,第三个是其他的设置。
4.‘/str1’在这里是'/\r’---表示window换行用到的\r
5.而'/str2'在这里是‘/’是空
6.最后的‘/’是结束,默认替换出现的第一个匹配。
也可以是'/p'表示把替换部分打印显示一下。
‘/g’是替换每行的所有匹配。
‘/gp’就是以上两个的组合了。
‘/Ng’表示从第N个匹配开始替换。
示例
1.将文件中的固定字符串转为指定的其他字符串
[root@instance-m6j3d3kh ~]# cat 1.txt
hello
i am boy
bye~
[root@instance-m6j3d3kh ~]# sed -i 's\boy\girl\' 1.txt
[root@instance-m6j3d3kh ~]# cat 1.txt
hello
i am girl
bye~
2.检查脚本中某一行的命令是否存在,不存在添加
这个直接使用命令行目前我只能先使用sed删除,然后再最后面添加一次。
[root@instance-m6j3d3kh ~]# sed -i 's\bye~\\' 1.txt
[root@instance-m6j3d3kh ~]# cat 1.txt
hello
i am girl
[root@instance-m6j3d3kh ~]# echo "see you~" >> 1.txt
[root@instance-m6j3d3kh ~]# cat 1.txt
hello
i am girl
see you~
[root@instance-m6j3d3kh ~]#