免费注册 查看新帖 |

Chinaunix

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

关于sed使用中的一些错误,请大家帮我看看该如何修正 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-16 09:03 |只看该作者 |倒序浏览
echo  "请键入需导出的索引号,如不输入任何字符,默认为导出所有的记录"       
echo  
echo "请输入索引号的范围,索引号必须为4位数字,如不满4位请在前面补零(如:0100-0110):\c";read INDEX
if [ $INDEX ]                                                          # 判断输入的内容是否为空
then                                                                   # 输入不为空,生成refer.key文件
        I1=`echo $INDEX|awk -F- '{print $1}'`
        I2=`echo $INDEX|awk -F- '{print $2}'`
        echo $I1
        echo $I2
        cat ./data/refer.key.all|sed -n '/'$I1'/,/'$I2'/p' > ./data/refer.key
else                                                                  # 输入为空,生成0-3999的refer.key               
        echo "导出所有的记录"
        cp ./data/refer.key.all ./data/refer.key
fi

说明:在refer.key.all中有所有的记录,需要将$I1—$I2范围内的记录导出来,但是在测试的时候发现两个问题,如果只输入一个数字例如0007,那么$I2就会为空,然后导出的记录条数就是全部。如果输入的格式是0007-0007也会出现问题,I1和I2都是0007,但是导出的记录还是全部。不知道cat ./data/refer.key.all|sed -n '/'$I1'/,/'$I2'/p'是哪里有问题,请大家指教一下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-03-16 09:20 |只看该作者
没错,就是这样的。
/pattern1/,/pattern2/表示对第一次匹配pattern1和第一次匹配pattern2之间的行(第二次匹配也一样)进行后面的子命令操作。
您想实现的需求,判断$I1和$I2相同时构造另一个sed语句即可。

论坛徽章:
0
3 [报告]
发表于 2007-03-16 16:13 |只看该作者
自己想了一个比较土的办法,搞定了!

echo "请输入索引号的范围,索引号必须为4位数字,如不满4位请在前面补零(如:0100-0110):\c";read INDEX
if [ "$INDEX" ]                                                          # 判断输入的内容是否为空
then                                                                     # 输入不为空,生成refer.key文件
     I1=`echo $INDEX|awk -F- '{print $1}'`
     I2=`echo $INDEX|awk -F- '{print $2}'`
     #echo $I1
     #echo $I2
     if [ "$I2" ]                                                       # 判断I2是否为空
     then                                                                # 不为空
        if [ "$I1" = "$I2" ]                                                # 判断I1是否等于I2
        then
                cat ./data/refer.key.all|grep "$I1" > ./data/refer.key
        else
                cat ./data/refer.key.all|sed -n '/'$I1'/,/'$I2'/p' > ./data/refer.key
        fi
     else                                                                # I2为空
        cat ./data/refer.key.all|grep "$I1" > ./data/refer.key
     fi
else                                                                  # 输入为空,生成0-3999的refer.key               
        echo "导出所有的记录"
        cp ./data/refer.key.all ./data/refer.key
fi

论坛徽章:
0
4 [报告]
发表于 2007-03-16 17:31 |只看该作者

回复 1楼 banhao 的帖子

'/'$I1'/,/'$I2'/p'
的变量是不是要使用双引号?
'/"$I1"/,/"$I2"/p'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP