linux有许多sed进程,linux操作中,使用sed卡死的问题

这段时间,写了个数据库表的备份功能,要求将数据导出csv文件。因为要导出成csv,而直接查询出来的时候每个字段的分割符是\t。所以要使用sed进行字符串替换。sed语句:sed  's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' .

程序开始运行后,大概备份了十几个表的样子,然后就卡住了,通过ps -ef 查看进程,发现多了个sed进程,再使用top,发现sed进程的cpu占用达到100%,这时候才知道程序是卡在哪里了。原来是sed卡死。同样的进程,在别的几个服务器上很流畅的运行,但是在另外个服务器上,也遇到sed卡死的问题。这让我百思不解,刚开始怀疑是服务器的性能问题,不过另外一台出问题的机器性能与其他不出问题的性能相识,所以排除了这个可能性。接下来就是一通瞎鼓捣。

在鼓捣了一上午+半个下午未果之后,总算想起,用笨方法,先将出现问题的表的数据导出一个文件,对这个文件执行上面提到的sed语句,最终,很符合我的期望,语句卡死了。这下子确定就是文件的问题了。又将这个文件拷贝到其它几个服务器上运行,发现有的可以,有的不行。

这时候,基本上可以确定,是编码问题。使用file命令查看文件的编码,UTF-8。出问题的机器上,输出的LANG值是zh_CN.GB18030。我将LANG的值设置为GB1800之后,再执行sed语句,终于,字符串被替换了。为了验证真的是编码问题,我又将文件的编码转换为gb2312,LANG的值设置为zh_CN.GB18030,执行sed语句,字符串成功被替换。

最终结论,sed卡死问题是因为编码原因。

解决方法:LANG=C  sed  's/\t/","/g;s/^/"/;s/$/"/;s/\n//g'  文件名

卡死程序的截图:包含环境编码,文件编码,文件内容:

0818b9ca8b590ca3270a3433284dd417.png

正常执行的截图:包含环境编码的修改,环境编码值的显示,文件编码,文件内容:

0818b9ca8b590ca3270a3433284dd417.png

第一次遇到这种问题,记录下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值