shell替换指定行的内容

问题:

我想修改 a.sql 的指定字符串  文件如下:

INSERT OVERWRITE WF_STUDIO_H(
                       `WFID`           
                      ,`WFNAME`         
                      ,`WFSIGN`         
                      ,`WFSORT`         
                      ,`WFFOLDER`       
)PARTITION(dt = cast (3000-12-31 as varchar(10)))
SELECT
                       `WFID`           
                      ,`WFNAME`         
                      ,`WFSIGN`         
                      ,`WFSORT`         
                      ,`WFFOLDER`       
           FROM    WF_STUDIO_H;
            where WFID=AAA
ALTER TABLE WF_STUDIO_H_BAKTEMP DROP IF EXISTS PARTITION(dt = cast (3000-12-31 as varchar(10)));

WF_STUDIO_H这个表名替换成WF_STUDIO_H_BAKTEMP

脚本如下:

#!/bin/sh

#指定字符串
tablename="WF_STUDIO_H"  

#grep -B5 B是显示匹配行和它前面的5行 -A是显示匹配后和它后面的n行 -C是匹配行和它前后各n行
#grep -n  顺便输出行号
hangline=`grep -B2 -n   DROP IF EXISTS PARTITION  a.sql|grep FROM|awk -F   {print $1} |sed s/-//g`

sedcom="${hangline}s/${tablename}/${tablename}_BAKTEMP/"
#替换指定行的字符
sed -i ${sedcom} a.sql

echo "脚本替换完成!"

exit 0

这个也可以写成多个序列,一个一个脚本执行。

shell替换指定行的内容

上一篇:systemd详解


下一篇:Dockerfile 案例之 SSh、systemctl、nginx、tomcat、mysql镜像