Как заменить несколько строк в файле (или несколько файлов)? - PullRequest
0 голосов
/ 29 апреля 2020

Одна из моих любимых утилит, sequelize, автоматически генерирует модели из базы данных. Однако он не всегда распознает функции автоинкрементации первичных ключей. Это приводит к тому, что модель иногда генерирует ошибки и вызывает ошибки при вставке. Как я могу найти строки для первичного ключа и заменить эти строки на правильные строки (имеющие флаг autoIncrement)?

Например, this ...

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

... нужно стать, это ...

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

В прошлом я пытался использовать sed, но столкнулся с проблемами с пробелами, -линейный синтаксис и запоминание структуры команд.

1 Ответ

0 голосов
/ 29 апреля 2020

Я создал утилиту под названием file-line-replacer, чтобы решить эту проблему. Он был написан для Node, поэтому, если на вашем компьютере Ma c / 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

Приведенная выше команда будет соответствовать целым блокам строк. Таким образом, в этом примере строка primaryKey: true гарантирует, что она будет нацелена на правильную область. Затем он заменит блок текста в --old-lines на блок текста в --new-lines И, поскольку указан --backup-dir, он создаст резервную копию каждого файла перед изменением оригинала.

Примечание. Разделителем по умолчанию для строк является | (pipe), однако вы можете выбрать свой собственный удалитель, передав --delimiter, чтобы установить глобально, или --old-lines-delimiter / --new-lines-delimiter, чтобы установить его для этой спецификации. c блок строк (на тот случай, если вам действительно нужно найти или заменить строки, имеющие разделитель по умолчанию).

На странице проекта есть множество других опций: https://github.com/FredLackey/file-line-replacer

...