用分号替换文件中的最后一个换行符

时间:2015-12-24 00:43:56

标签: mysql bash

我已经转储了一个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;在这种情况下,但它不是。

2 个答案:

答案 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