如何用sed或awk批量替换from table(表名)为from 表名并保留分号?
解决方案:用sed或awk批量修改SQL语句格式
一、使用sed命令
sed适合快速做文本替换,用正则匹配目标格式并完成修改:
sed 's/\bfrom table(\([^)]*\))/from \1/g' your_sql_file.sql
命令说明:
\b:匹配单词边界,避免误匹配fromtable这类连写的异常情况table(\([^)]*\)):捕获table()内部的表名([^)]*表示匹配除右括号外的所有字符)from \1:将匹配到的内容替换为from加上捕获到的表名- 若要直接修改原文件,添加
-i参数(macOS系统需写成-i ''):
sed -i 's/\bfrom table(\([^)]*\))/from \1/g' your_sql_file.sql
二、使用awk命令
awk的gsub函数支持全局文本替换,同样能实现需求:
awk '{gsub(/from table\(([^)]*)\)/, "from \\1"); print}' your_sql_file.sql > modified_sql.sql
命令说明:
gsub(/正则/, 替换内容):全局替换每行中匹配正则的内容\\1对应正则里捕获到的表名,awk里转义反斜杠需要写两个- 命令会把修改后的内容输出到
modified_sql.sql,可检查无误后再覆盖原文件
效果验证
用你提供的示例代码测试,两种命令都能精准将from table(paper_table)改成from paper_table,from table(cheese_table) t;改成from cheese_table t;,同时完整保留行尾的分号和注释。
内容的提问来源于stack exchange,提问作者sufs2000
相关产品推荐
相关产品推荐

