sql_file.txt文件中内容:
select * from t1 as A where 1 = 1
select * from t2 a where 1 =1
select * from t3
select * from t4 A   WHERE 1 =1------------------
我想实现:在有别名a的行中,在a where 后(不区分大小写,可有多个空格),加上一个过滤条件内容为:
 (A.UPD_DATE > (SELECT LAST_CHK_DATE FROM table_xx WHERE sql_code='xx')) 
 ------------------
我脚本中是这么写的:
${sub_str}=" a where (A.UPD_DATE > (SELECT LAST_CHK_DATE FROM table_xx WHERE sql_code='xx')) and ( "sed -i "{s/[ ][a,A][ ][ ]*[w,W][h,H][e,E][r,R][e,E][ ]/ ${sub_str} /;s/$/)/}" ${sql_file}
------------------
我的想法是,用sed命令匹配到 a where ,然后将 a where 替换为${sub_str}。
在匹配到a where的基础上,在行的末尾加上一个右括号  )------------------
但是,现在问题是,脚本将所有行末尾都加上了右括号!这是不对的,对于t3表不应该加括号。所以,到底应该怎么实现呢?如何修改sed命令,使得在匹配到a where的基础上,进行替换,再在行尾添加右括号?也就是假如这是sed命令: sed /模式匹配1/替换2/添加括号3
当1满足时,执行23;当1不满足时,23不执行