- Скрипт замены текста в файле
- Варианты замены текста из командной строки
- Утилита поиска и замены текста
- Скрипт на JS или VBS
- Bat файлы
- Замена текста в файле скриптом JScript
- Код скрипта замены текста
- Запуск скрипта замены текста
- Примечания к скрипту
- Замена текста программой nhrt
- Замена строк и текста в файле с Powershell replace
- VBScript Replace Function
- Syntax
- Examples
- Example 1
- Example 2
- Example 3
- Example 4
- Example 5
- JavaScript метод replace()
- Определение и применение
- Поддержка браузерами
- JavaScript синтаксис:
- Версия JavaScript
- Значения параметров
- Batch script to find and replace a string in text file within a minute for files up to 12 MB
- 6 Answers 6
Скрипт замены текста в файле
Задача замены строки или её части в текстовом файле в командной строке или в bat файле может быть решена различными способами, в зависимости от требований.
Варианты замены текста из командной строки
Утилита поиска и замены текста
Специализированный инструмент всегда даёт самый функциональный и быстрый для реализации способ: готовые утилиты поддерживают все кодировки файлов, имеют опции для разных вариантов замены, поддерживают регулярные выражения и не требуют отладки!
Единственная ситуация, когда вариант с готовой утилитой может не подойти – если есть непреодолимое требование не использовать нестандартные (не входящие в состав Windows) компоненты при развёртывании на большое число корпоративных компьютеров. Но такое встречается нечасто.
Поэтому применение готового, отлаженного и протестированного инструмента является предпочтительным вариантом!
Скрипт на JS или VBS
Возможности VBScript/JScript позволяют реализовать различные варианты замены, включая поддержку регулярных выражений, но всё-таки имеют ограниченные возможности: поддержку меньшего числа кодировок файлов, отсутствие массовой замены, отсутствие подкаталогов и т.д. Любое изменение необходимо отлаживать и тестировать. В общем, очередной «велосипед».
Вариант со скриптом оптимально использовать в случае, когда по каким-то причинам нельзя использовать готовую утилиту.
Bat файлы
О серьёзных возможностях программирования bat файлов говорить не приходится – собственно, bat файл потому и называется пакетным файлом, что предназначен для запуска списка команд по очереди, а не для программирования циклов и обработки переменных.
Сильные стороны bat файлов – удобная форма запуска команд по списку, простое перенаправление вывода и использование переменных окружения, но лучше в bat файлах не программировать.
Ладно раньше, когда предустановленной альтернативы не было, но сейчас, когда на всех компьютерах есть WSH с VBScript/JScript и PowerShell…
Замена текста в файле скриптом JScript
Чтобы сделать замену текста в текстовом файле, в том числе, с использованием регулярных выражений, можно использовать следующий скрипт JScript, который:
- открывает указанный текстовый файл
- читает его построчно
- для каждой строки выполняет замену по регулярному выражению
Код скрипта замены текста
Запуск скрипта замены текста
При запуске скрипта необходимо параметрами передать имя файла, строку поиска (регулярное выражение), строку замены:
Примечания к скрипту
Скрипт обрабатывает файлы в 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. В обоих случаях я ищу два числа подряд разделенными каким-то символом.
Другой пример выражения с окончаниями. Шаблон для замены один, а склонения могут быть разными:
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:
|
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.