Заменить строку в файле без временного файла

Вопрос или проблема

У меня есть текстовый файл объемом несколько гигабайт, и я хочу заменить все вхождения utf8mb4_0900_ai_ci на utf8mb4_unicode_520_ci.

Обычно я использовал бы sed -i для этого, как предложено здесь: найти и заменить строку в файле без использования временного файла с помощью SED

Однако это создает временный файл за кулисами, а мне нужно, чтобы замена происходила в среде, где не будет достаточно дискового пространства для этого.

Как я могу изменить файл на месте?

Ответ или решение

Для выполнения замены строки в файле без использования временных файлов, особенно в условиях ограниченного дискового пространства, можно воспользоваться командой perl с флагом -i для редактирования файла на месте. Данная команда позволяет производить замену, сохраняя изменения без создания дополнительных временных файлов. Пример команды выглядит следующим образом:

perl -pi -e 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_520_ci/g' ваш_файл.txt

Давайте разберём параметры команды:

  • perl: это интерпретатор языка Perl, который поддерживает регулярные выражения и позволяет выполнять замены.
  • -p: эта опция заставляет Perl обрабатывать файл построчно, автоматически выводя каждую строку после обработки.
  • -i: эта опция отвечает за редактирование файла на месте. Если вы хотите сделать резервную копию оригинала, вы можете указать расширение, например -i.bak, что создаст файл резервной копии с указанным расширением.
  • -e: позволяет вам передать Perl выражение для выполнения непосредственно из командной строки.
  • s/old/new/g: это выражение заменяет все (g — глобальный флаг) вхождения строки old (в данном случае utf8mb4_0900_ai_ci) на строку new (в данном случае utf8mb4_unicode_520_ci).

Важно понимать, что использование perl в данном случае действительно не требует создания временных файлов, что делает его идеальным для работы с большими файлами в условиях ограничения по пространству на диске.

Протестируйте команду на небольшом файле перед запуском на большом, чтобы убедиться в правильности выполнения и ожидаемом результате.

Оцените материал
Добавить комментарий

Капча загружается...