問題:
我想修改 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
這個也可以寫成多個序列,一個一個腳本執行。