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

這個也可以寫成多個序列,一個一個腳本執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM