问题:
我想修改 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
这个也可以写成多个序列,一个一个脚本执行。