Replace text script windows

Скрипт замены текста в файле

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

Варианты замены текста из командной строки

Утилита поиска и замены текста

Специализированный инструмент всегда даёт самый функциональный и быстрый для реализации способ: готовые утилиты поддерживают все кодировки файлов, имеют опции для разных вариантов замены, поддерживают регулярные выражения и не требуют отладки!

Единственная ситуация, когда вариант с готовой утилитой может не подойти – если есть непреодолимое требование не использовать нестандартные (не входящие в состав Windows) компоненты при развёртывании на большое число корпоративных компьютеров. Но такое встречается нечасто.

Поэтому применение готового, отлаженного и протестированного инструмента является предпочтительным вариантом!

Скрипт на JS или VBS

Возможности VBScript/JScript позволяют реализовать различные варианты замены, включая поддержку регулярных выражений, но всё-таки имеют ограниченные возможности: поддержку меньшего числа кодировок файлов, отсутствие массовой замены, отсутствие подкаталогов и т.д. Любое изменение необходимо отлаживать и тестировать. В общем, очередной «велосипед».

Вариант со скриптом оптимально использовать в случае, когда по каким-то причинам нельзя использовать готовую утилиту.

Bat файлы

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

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

Ладно раньше, когда предустановленной альтернативы не было, но сейчас, когда на всех компьютерах есть WSH с VBScript/JScript и PowerShell…

Замена текста в файле скриптом JScript

Чтобы сделать замену текста в текстовом файле, в том числе, с использованием регулярных выражений, можно использовать следующий скрипт JScript, который:

  • открывает указанный текстовый файл
  • читает его построчно
  • для каждой строки выполняет замену по регулярному выражению
Читайте также:  Windows firewall service stops

Код скрипта замены текста

Запуск скрипта замены текста

При запуске скрипта необходимо параметрами передать имя файла, строку поиска (регулярное выражение), строку замены:

Примечания к скрипту

Скрипт обрабатывает файлы в ANSI кодировке. Для Unicode файла необходимо заменить 4-й аргумент в вызовах OpenTextFile c false на true.

Поскольку обработка ведётся по строкам, то регулярные выражения сработают только в пределах одной строки.

Замена текста программой nhrt

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

Замена строк и текста в файле с Powershell replace

08 сентября 2019

Для замены значений в тексте и строках есть ключ Powershell replace. Обычно этот ключ используется, например, для замены http на https в каком-то большом тексте или последнего октета IP адреса. С этим ключом можно использовать регулярные выражения.

Для примера у нас есть следующий текст:

Заменим слово ‘дом’ на сокращенный вариант и выведем результат:

Может быть так, что мы хотим заменить множество значений в одном тексте. Ключ replace можно использовать множество раз. На примере ниже я заменю слова на латинице на кириллицу:

Как вы видите, регистр букв (большая или маленькая) не имеет значение. Если для вас это важно, то можно использовать -creplace, который будет учитывать регистр букв при совпадении.

Если вы хотите заменить значение, которое в тексте встречается множество раз, заменяться они все. Аналогичное сработает и с массивом Powershell:

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

Так как я не указал на что заменять совпадающую часть, то она у меня просто удалилась. Значение ‘2’ в регулярных выражения говорит, что я заменяю все цифры от 0 до 9.

В Powershell replace можно указать группы захвата. Группы захвата делятся на три типа:

  • $0 — строка, которую мы указываем для замены
  • $1 — содержимое первой группы
  • $2 — содержимое второй группы и т.д.

Это используется в регулярных выражениях. Допустим в тексте у вас есть множество дат американского формата 12/31/2019 и все их нужно заменить на российский. Мы можем выполнить замену так, что день месяца стоял бы первым, а сам месяц вторым:

Символ ^ обозначает начало строки. Скобки такого типа () говорят, что это группа один $1 и два $2. В обоих случаях я ищу два числа подряд разделенными каким-то символом.

Читайте также:  Java 64 бит для windows

Другой пример выражения с окончаниями. Шаблон для замены один, а склонения могут быть разными:

VBScript Replace Function

The Replace function replaces a specified part of a string with another string a specified number of times.

Syntax

Parameter Description
string Required. The string to be searched
find Required. The part of the string that will be replaced
replacewith Required. The replacement substring
start Optional. Specifies the start position. Default is 1. All characters before the start position will be removed.
count Optional. Specifies the number of substitutions to perform.
Default value is -1, which means make all possible substitutions
compare Optional. Specifies the string comparison to use. Default is 0

Can have one of the following values:

  • 0 = vbBinaryCompare — Perform a binary comparison
  • 1 = vbTextCompare — Perform a textual comparison

Examples

Example 1

Replace the word «beautiful» with «fantastic»:

The output of the code above will be:

Example 2

Replace the letter «i» with «##»:

The output of the code above will be:

Example 3

Replace the letter «i» with «##», starting at position 15:

Note that all characters before position 15 are removed.

The output of the code above will be:

Example 4

Replace the 2 first occurences of the letter «i» with «##», starting at position 1:

The output of the code above will be:

Example 5

Replace the letter «t» with «##», with textual, and binary, comparison:

JavaScript метод replace()

Определение и применение

JavaScript метод replace() выполняет внутри строки поиск с использованием регулярного выражения (объект RegExp ), или строкового значения и возвращает новую строку, в которой будут заменены найденные значения.

Обращаю Ваше внимание, что eсли для регулярного выражения используется глобальный флаг g (global match flag), то метод replace() заменяет все найденные совпадения строкой замены. Если флаг g не используется, то метод replace() осуществляет замену только первого совпадения.

Поддержка браузерами

Метод Chrome Firefox Opera Safari IExplorer Edge
replace() Да Да Да Да Да Да

JavaScript синтаксис:

Версия JavaScript

Значения параметров

Строка, определяющая текст для замены, или функция, которая вызывается для генерации текста замены. Строка замены может включать следующие специальные шаблоны замены:

Параметр Описание
searchvalue Объект регулярного выражения или строковое значение. Если аргумент является строкой, а не регулярным выражением, то метод replace() выполняет буквальный поиск строки, а не преобразует его в регулярное выражение с помощью вызова конструктора new RegExp (regexp).
newValue
Символы Замена
$1, $2, …, $99 Текст, соответствующий подвыражению с номером от 1 до 99 внутри регулярного выражения regexp (объекта RegExp ).
$& Вставляет сопоставившуюся подстроку.
$` Вставляет часть строки, предшествующую сопоставившейся подстроке (текст слева от найденной подстроки).
$’ Вставляет часть строки, следующую за сопоставившейся подстрокой (текст справа от найденной подстроки).
$$ Осуществляет вставку символа доллара.

Обратите внимание на то, что если аргумент является функцией, то она будет вызываться для каждого найденного соответствия, а возвращаемая ею строка будет использоваться в качестве текста для замены.
Функция принимает следующие аргументы:

  • Первый аргумент, передаваемый функции это строка, которая соответствует шаблону (cоответствует шаблону замены $&).
  • Следующие за ним аргументы это строки, соответствующие любым подвыражениям внутри шаблона (подобных аргументов может быть от ноля и более).
  • Следующий аргумент представляет из себя целое число, указывающее позицию внутри строки, в которой было найдено соответствие.
  • Последний аргумент функции замены содержит копию строки по которой происходит замена (содержит ссылку на саму строку).

Важный момент заключается в том, что точное число аргументов зависит от того, был ли первый аргумент объектом RegExp , если да, то сколько подгрупп в нём определено.

Batch script to find and replace a string in text file within a minute for files up to 12 MB

I have written a batch script to replace a string in text file.

Following is the script.

But for a 12MB file, it is taking close to 7 min. I want it to be under a minute. Can we make use of find or findstr command to reduce the time taken?

6 Answers 6

Give this a shot:

Just download fart (find and replace text) from here

use it in CMD (for ease of use I add fart folder to my path variable)

here is an example:

this command will search in C:\myfolder and all sub-folders and replace findSTR with replaceSTR

-r means process sub-folders recursively.

fart is really fast and easy

A variant using Bat/Powershell (need .net framework):

This uses a helper batch file called repl.bat — download from: https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

Place repl.bat in the same folder as the batch file or in a folder that is on the path.

Repl.bat is a hybrid batch file using native Windows scripting and is far faster than a regular batch script.

The L switch makes the text search and replace a literal string and I’d expect the 12 MB file to complete in several seconds on a modern PC.

Читайте также:  Установка операционной системы mac os
Оцените статью