我已经转储了一个mysql表,并且我连续添加了几个创建表 - 唯一的问题是每个create table的末尾都没有分号。
我想要做的就是捕捉每个人" show create table"是取代最后的" \ n"用a;
有人可以建议我这样做吗?
#!/bin/bash
> master_file.sql
> tmp.sql
while read line
do
mysql --skip-column-names -u root -pxxxxxxxxxx test -e "show create table $line" > tmp.sql
sed -i 's/\\n/\n/g' tmp.sql
#echo ';' >> tmp.sql
cat tmp.sql >> master_file.sql
echo "" >> master_file.sql
done < table_list
我的输出如下:
hours CREATE TABLE `hours` (
) DEFAULT CHARSET=latin1
;
user_session_view CREATE TABLE `user_session_view` (
) DEFAULT CHARSET=utf8
;
分号应该立即在&#34; latin1&#34;的右边。或&#34; utf8&#34;在这种情况下,但它不是。
答案 0 :(得分:2)
利用“流程替换”删除最后一行的事实:
printf %s "$(< tmp.sql);" > tmp2.sql
在您的情况下,您可以将sed和this结合起来:
printf %s "$(< tmp.sql);" | sed 's/\\n/\n/g' >> master_file.sql
请注意,输出文件应与输入文件不同。
使用awk的解决方案可能是:
awk 'NR>1 {print l} {l=$0} END{ORS=""; print($0 ";")}' tmp.sql >> master_file.sql
答案 1 :(得分:0)
您可以使用sed
的test.txt
create table (
) default charset=latin1
create table (
) default charset=utf8
test
sed和结果
sed -r 's|(charset=)(.*)|\1\2;|g' test.txt > newtest.txt
cat newtest.txt
create table (
) default charset=latin1;
create table (
) default charset=utf8;
test