shell动态生成.sql文件的方法
零、环境
1. Ubuntu 22.04(其它版本也可以)
2. sqlite3(系统自带)
一、生成空数据库文件及对应的sql文件
1. 打开终端,运行sqlite3 xxx.db(本例中为shiyan.db),生成空的数据库文件。如下所示:
$ sqlite3 shiyan.db
2. 由shiyan.db生成对应的.sql文件。如下所示:
sqlite3 shiyan.db .dump > shiyan.sql
3. 生成的shiyan.sql文件内容如下所示:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
COMMIT;
针对步骤2,有一个知识点,具体说明如下:
#############################################################################
利用dump命令导出数据库表到文件
1. 首先,重定向sqlite输出到文件。同样不需要手动创建文件,直接给出文件名即可:
sqlite> .output test_table.sql
2. 然后,利用dump命令,将数据导出到文件。如果dump不带参数,则导出整个数据库:
sqlite> .dump test_table
3. 重定向输出回标准命令行输出:
sqlite> .output stdout
4. 查看test_table.sql文件内容:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
CREATE TABLE test_table (id integer primary key, name text, description text);
-
INSERT INTO "test_table" VALUES(0,'name0','des0');
-
INSERT INTO "test_table" VALUES(1,'name1','des1');
-
INSERT INTO "test_table" VALUES(2,'name2','des2');
-
COMMIT;
#############################################################################
以上是在启动sqlite3、并在sqlite3中的操作步骤。我们这里是直接在终端下使用shell命令完成同样的功能。
二、向sql文件添加指定内容
步骤一中有2个.sql文件:一个是我们通过shell命令生成的空的shiyan.db对应的shiyan.sql;另一个是引用的知识点示例中生成的有具体内容的test_table.sql文件。那么如何在不启动sqlite3的情况下,将我们的shiyan.sql文件向test_table.sql文件靠齐,即让两者的内容一致?
这可以通过sed命令实现,具体方法如下:
1. 在shiyan.sql文件的“BEGIN TRANSACTION”一行下边插入“CREATE TABLE test_table (id integer primary key, name text, description text);”
sed -i '/BEGIN TRANSACTION;/a CREATE TABLE test_table(id integer primary key, name text, description text);' shiyan.sql
执行完以上命令后,shiyan.sql的内容如下:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
CREATE TABLE test_table (id integer primary key, name text, description text);
-
COMMIT;
可以看到,shiyan.sql已经向test_table.sql“靠近”了一步。
2. 在shiyan.sql文件的“COMMIT;”一行上边插入"INSERT INTO "test_table" VALUES(0,'name0','des0');"
sed -i '/COMMIT;/iINSERT INTO "test_table" VALUES(0,'\''name0'\'','\''des0'\'');' shiyan.sql
执行完以上命令后,shiyan.sql的内容如下:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
CREATE TABLE test_table (id integer primary key, name text, description text);
-
INSERT INTO "test_table" VALUES(0,'name0','des0');
-
COMMIT;
可以看到,shiyan.sql已经向test_table.sql又“靠近”了一步。
3. 在shiyan.sql文件的第4行下边插入"INSERT INTO "test_table" VALUES(1,'name1','des1');"
sed -i '4 a INSERT INTO "test_table" VALUES(1,'\''name1'\'','\''des1'\'');' shiyan.sql
执行完以上命令后,shiyan.sql的内容如下:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
CREATE TABLE test_table (id integer primary key, name text, description text);
-
INSERT INTO "test_table" VALUES(0,name0,des0);
-
INSERT INTO "test_table" VALUES(1,name1,des1);
-
COMMIT;
可以看到,shiyan.sql已经向test_table.sql又“靠近”了一步。
4. 在shiyan.sql文件的第6行上边插入"INSERT INTO "test_table" VALUES(12,'name12','des2');"
sed -i '6 i INSERT INTO "test_table" VALUES(2,'\''name2'\'','\''des2'\'');' shiyan.sql
执行完以上命令后,shiyan.sql的内容如下:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
CREATE TABLE test_table (id integer primary key, name text, description text);
-
INSERT INTO "test_table" VALUES(0,'name0','des0');
-
INSERT INTO "test_table" VALUES(1,'name1','des1');
-
INSERT INTO "test_table" VALUES(2,'name2','des2');
-
COMMIT;
对比test_table.sql文件的内容:
-
PRAGMA foreign_keys=OFF;
-
BEGIN TRANSACTION;
-
CREATE TABLE test_table (id integer primary key, name text, description text);
-
INSERT INTO "test_table" VALUES(0,'name0','des0');
-
INSERT INTO "test_table" VALUES(1,'name1','des1');
-
INSERT INTO "test_table" VALUES(2,'name2','des2');
-
COMMIT;
可以看到,两者的内容完全一致了。
第二(注意是大写)步中有以下知识点:
1. 用sed来插入文本到指定行
#############################################################################
以下内容引自:
基本语法
- 只是在屏幕输出/打印中显示更改,并不改变文件本身内容
-
sed '作用范围行 插入行前/行后 插入内容' 文件名
-
-
sed '作用范围行插入行前/行后插入内容' 文件名
-
-
sed '作用范围行插入行前/行后 插入内容' 文件名
- 添加文本常常需要的是添加内容到文件里,更新文件,要在sed后面加
-i
,是编辑文档“edit files in place”选项。
sed -i '作用范围行 插入行前/行后 插入内容' 文件名
行前用 i
,行后用a
。i
比a
常用。
当然要插入内容到最后一行就得用a
了。同样要插入内容到文件第一行需要用i
。
所以这个插入操作要注意行号的变化。下面的内容多次添加文本时注意具体写了注意的内容。
#############################################################################
2. 用sed在文件的指定位置后面添加内容
#############################################################################
以下内容引自:
问题说明:
想在sys_config.fex文本的某个字符串后面添加一个flag
例如:sys_config.fex里有这么一段
[nand_para]
nand_use = 1
要求在[nand_para]后面添加一个flag = 1,最后变成(不影响其他内容):
[nand_para]
flag = 1
nand_use = 1
具体实现:
sed -i '/\[nand_para\]/a\flag = 1' sys_config.fex
#############################################################################
3. sed中转义单引号
将 '
写成 '\''
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhffjc
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13