首页 > 系统服务 > 详细

shell实例

时间:2015-07-14 06:20:44      阅读:262      评论:0      收藏:0      [点我收藏+]

    今天遇到了这么一个问题,同事写的SQL文件中有212条SQL,全部SQL都使用select ... into outfile形式,但是在导出文件名都为"/opt/export/tmp.dat",所以在运行时第二条SQL就报错"/opt/export/tmp.dat"已经存在导致脚本运行失败。于是,就写一个小脚本来解决此问题。


    需求是这样的,在03.sql这个文件中出现了212次“/opt/export/tmp.dat”,要将tmp.dat替换为不同的212个文件名。

    具体是这样实现的:

  • 第一步

使用

grep -n "tmp\.dat" 03.sql |awk -F‘:‘ ‘{print $1}‘ > list.txt

将03.sql文件中所有包含"tmp.dat"的行号打印出来。

需要注意的是,在使用grep时,默认是使用正则表达式进行匹配的,所有tmp.dat中的"."需要有\进行转义,变为"tmp\.dat",否则的话匹配到的行会不准确。

  • 第二步

    编写脚本,解决问题

for i in `seq 1 212`
do
    line=`head -$i list.txt|tail -1`
    sed -i "${line}s/tmp\.dat/sql_${i}\.dat/g" 03.sql
done

执行此脚本,会对每一个"tmp.dat"进行匹配替换成"sql_**.dat",到达预期目标。



shell实例

原文:http://hakaz.blog.51cto.com/5067476/1673918

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!