Мне нужно вставить текст (в частности, символ FormFeed, значение ASCII 12 или 0xC) каждые 66 строк в текстовом файле в окне Windows. Есть ли встроенный инструмент, который может сделать это?
2 ответа
Это может быть сделано достаточно легко с помощью PowerShell, JScript или VBScript. Но если вы хотите остаться в мире пакетной обработки, вам понадобится какая-то нестандартная утилита или сложная пакетная программа.
Используя гибридную утилиту JScript/batch REPL.BAT, которая выполняет поиск и замену регулярных выражений в stdin и записывает результат в stdout:
type "file.txt"|repl "(.*\n){66}" "$&\x0C" mx >"file.txt.new"
move /y "file.txt.new" "file.txt" >nul
Выше предполагается, что у вас есть REPL.BAT в вашем текущем каталоге, или, что еще лучше, где-то на вашем пути.
Если вы разрешите использовать Powershell для последних версий Windows, вы можете сделать это следующим образом из Powershell:
(gc input.txt -raw) -replace '(.*\n){66}', "`$0$([char]0x0c)" > output.txt
Если вы работаете с cmd.exe, вы должны запустить это так:
powershell (gc input.txt -raw) -replace '(.*\n){66}', \"`$0$([char]0x0c)\" > output.txt
Обратите внимание, что Powershell будет использовать кодировку Unicode, когда вы используете >
перенаправление. Если вам нужна другая кодировка, вы можете направить в out-file -encoding [oem|default|ascii|utf8]
(больше информации о кодировках здесь, под заголовком -Encoding).
например:
(gc input.txt -raw) -replace '(.*\n){66}', "`$0$([char]0x0c)" | out-file -encoding utf8