免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2064 | 回复: 6
打印 上一主题 下一主题

[文本处理] sed报错,求助 [复制链接]

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-13 17:23 |只看该作者 |倒序浏览
  1. #!/bin/bash
  2. if [ -f '/tmp/errport.txt' ]
  3. then
  4. paixu=`cat /tmp/errport.txt|sort|uniq -c`
  5. for i in $paixu
  6. do
  7. err_num=`echo $i|awk '{print $1}'`
  8. port=`echo $i|awk '{print $2}'`
  9. if [ $err_num -ge 3 ]
  10. then
  11. cd /soft/bin/;./restart.sh
  12. sed -i "/$port/d" /tmp/errport.txt
  13. fi
  14. done
  15. fi
复制代码
/tmp/errport.txt里只有端口号,我想按端口号出现的次数,超过3次,就重启服务,并且删除端口号

执行会有以下报错:
sed:-e 表达式 #1,字符 0:前面没有正则表达式

在脚本外面执行没问题

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2015-10-13 17:33 |只看该作者
回复 1# davie5201314
你确定前面的命令取到的port不为空?
按错误提示怀疑port是空值.

   

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
3 [报告]
发表于 2015-10-13 17:38 |只看该作者
如果是空值,倒不会报错,有端口号,才会报,同样的命令在脚本外面执行是没问题 的!回复 2# Herowinter


   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2015-10-13 17:42 |只看该作者
回复 3# davie5201314

sed前面加一句
echo "$port"
打出来的值是多少?
   

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
5 [报告]
发表于 2015-10-13 17:45 |只看该作者
居然是空值,不科学啊回复 4# Herowinter


   

论坛徽章:
1
摩羯座
日期:2014-12-22 14:37:25
6 [报告]
发表于 2015-10-13 17:52 |只看该作者
明白了,for循环以空格作为分界了,而不是行,好蛋疼回复 4# Herowinter


   

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
7 [报告]
发表于 2015-10-13 19:57 |只看该作者
逐行处理一般用:

while read  line; do
    do something
done <file

while read  line; do
    do something
done <<<"$(cmd | cmdx | cmdy)"
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP