使用sed / awk / grep更改句子的顺序

时间:2014-06-26 12:19:16

标签: mysql awk sed

我正在尝试将MSSQL .sql文件转换为MYSQL语法文件。我已经设法使用基本的find / replace来改变一些语法,但是我还需要改变行中单词的顺序。基本上这些陈述是这样的:

ALTER TABLE ADD INDEX index_name ON table_name(column_name)

我想纠正这种格式的语句(MYSQL语法):

ALTER TABLE table_name ADD INDEX index_name(column_name)

在文件中有70种这样的语句。基本上,table_name必须从ON和(和放在TABLE和ADD之间)之间移位。是否可以使用sed / awk / grep?< / p>

2 个答案:

答案 0 :(得分:3)

以下适用于您的示例输入的sed

sed 's/\(ADD INDEX\) \(.*\) ON \(.*\)(/\3 \1 \2(/'

答案 1 :(得分:0)

你也可以使用这个GNU sed命令,

sed -r 's/^(\w+\s\w+)(\s\w+\s\w+) (\w+) \w+ (\w+)(.*)$/\1 \4\2 \3\5/g' file

示例:

$ echo 'ALTER TABLE ADD INDEX index_name ON table_name(column_name)' | sed -r 's/^(\w+\s\w+)(\s\w+\s\w+) (\w+) \w+ (\w+)(.*)$/\1 \4\2 \3\5/'
ALTER TABLE table_name ADD INDEX index_name(column_name)