我最喜欢的实用程序之一 sequelize 将自动从数据库生成模型。但是,它并不总是识别主键上的自动递增函数。这会导致模型有时会生成错误并导致插入时出错。如何搜索主键的行并将这些行替换为正确的行(具有 autoIncrement
标志)?
例如,这...
id: {
type: DataTypes.INTEGER.UNSIGNED,
allowNull: false,
primaryKey: true
},
……需要变成,这……
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true
},
我过去曾尝试使用 sed,但在间距、多行语法和记住命令结构方面遇到了问题。
最佳答案
我创建了一个名为 file-line-replacer
的实用程序来解决这个问题。它是为 Node 编写的,所以只要你在 Mac/Linux/Windows 机器上安装了 Node,你就可以毫无问题地使用它。
首先,安装它(我更喜欢全局安装)...npm i -g file-line-replacer
...然后,只需运行一个命令(这个例子是针对上面的 Sequelize 问题)...
file-line-replacer \
--search-dir "/Users/flackey/my-project/src/data/models" \
--backup-dir "/Users/flackey/my-project/_backup" \
--old-lines "allowNull: false,|primaryKey: true" \
--new-lines "autoIncrement: true,|primaryKey: true" \
--overwrite
上面的命令将匹配整个 BLOCKS 行。所以,在这个例子中,
primaryKey: true
行确保它定位到正确的区域。然后它将用 --old-lines
中的文本块替换 --new-lines
中的文本块并且,因为提供了 --backup-dir
,它将在修改原始文件之前创建每个文件的备份。Note: The default delimiter for lines is
|
(pipe), however you can select your own delemiter by passing in--delimiter
, to set globally, or--old-lines-delimiter
/--new-lines-delimiter
to set it for that specific block of lines (in case you need to actually search for or replace lines having the default delimiter).
项目页面上列出了大量其他选项:https://github.com/FredLackey/file-line-replacer
关于node.js - 如何替换文件(或多个文件)中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504688/