在Shell中读取一行不正确的解决方法

转载:http://bbs.chinaunix.net/thread-2325152-1-1.html

 

在ChinaUnix上看到这个问题,自己非常的有感触,做个remark,以供以后参考

 

问题:

文件 netinfo,里面存储 的内容如下
0 SUCCES - 成功 ---- 202.100.93.98
0 SUCCES - 成功 ---- 61.160.226.168
0 SUCCES - 成功 ---- 221.206.130.32
0 SUCCES - 成功 ---- 221.206.130.33
2 SUCCES - 成功 ---- 123.235.39.123
0 SUCCES - 成功 ---- 221.192.150.92
0 SUCCES - 成功 ---- 222.222.198.93
1 SUCCES - 成功 ---- 61.158.248.62
0 SUCCES - 成功 ---- 61.191.62.217

我现在是要读取每行的第一个字符,如果不是为0,就输出该行,用for写不行,for写的话,它默认是空格为记录分隔符了,太扯淡了:

  for ERR_INFO in `cat /tmp/netinfo`
  do
        ERROR_INFO=`echo "$ERR_INFO"|awk '{print $1}'`
         
       if [ $ERROR_INFO -ne 0 ]
        then
                 echo "$ERR_INFO" >> /tmp/testresult
         fi
done

我这边测试,只能用while read line写才能准确的读取每行。问题在于,while这个玩意执行起来就像老牛拉磨似的,忒花时间 了!

请教 为什么for循环不行,是不是因为有中文的原因??

 

解答

  1. OLDIFS=$IFS
  2. IFS=$'/n'
  3. 'for code'
  4. IFS=$OLDIFS
先设定新的IFS,执行完你的for code,然后再还原IFS
你本来的IFS是空格 TAB 和换行做为断句,你这一行文件中有空格,它就默认给断开了,明白不,只有设置IFS为换行才可以正常读取。这个问题经常都会在shell中遇到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值