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

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

原文地址:https://www.cnblogs.com/hello-wei/p/13051038.html