【问题标题】:How to replace multiple lines in a file (or multiple files)?如何替换文件(或多个文件)中的多行?
【发布时间】:2020-04-29 22:48:42
【问题描述】:

我最喜欢的实用程序之一 sequelize 会自动从数据库生成模型。但是,它并不总是能识别主键上的自动增量功能。这会导致模型有时会产生错误并在插入时导致错误。如何搜索主键的行并将这些行替换为正确的行(具有autoIncrement 标志)?

例如,这个 ...

    id: {
      type: DataTypes.INTEGER.UNSIGNED,
      allowNull: false,
      primaryKey: true
    },

...需要变成,这个 ...

    id: {
      type: DataTypes.INTEGER.UNSIGNED, 
      autoIncrement: true, 
      primaryKey: true 
    },

我过去曾尝试使用 sed,但遇到了间距、多行语法和记住命令结构方面的问题。

【问题讨论】:

    标签: node.js sequelize.js sequelize-cli


    【解决方案1】:

    我创建了一个名为file-line-replacer 的实用程序来解决这个问题。它是为 Node 编写的,因此,只要您在 Mac / Linux / Windows 机器上安装了 Node,就可以毫无问题地使用它。

    首先,安装它(我更喜欢全局安装)...

    npm i -g file-line-replacer

    ...然后,只需运行一个命令(此示例用于上述续集问题)...

    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,它将在修改原始文件之前创建每个文件的备份。

    注意:行的默认分隔符是|(管道),但是您可以通过传入--delimiter来选择您自己的分隔符,以全局设置,或--old-lines-delimiter/--new-lines-delimiter为特定的设置它行块(如果您需要实际搜索或替换具有默认分隔符的行)。

    项目页面上列出了许多其他选项:https://github.com/FredLackey/file-line-replacer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2017-11-08
      • 2014-02-03
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      相关资源
      最近更新 更多