Есть ли какая-нибудь утилита типа sed для cmd.exe?[закрыто]

StackOverflow https://stackoverflow.com/questions/127318

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хочу программно редактировать содержимое файла с помощью командной строки Windows (cmd.exe).В *nix есть СЭД для этих задач.Есть ли какой-нибудь полезный эквивалент в Windows?

Редактировать:Я ищу собственное решение для командной строки.

Это было полезно?

Решение

Сегодня powershell меня спас.

Для grep есть:

get-content somefile.txt | where { $_ -match "expression"}

и для sed есть:

get-content somefile.txt | %{$_ -replace "expression","replace"}

Более подробную информацию см. Запись в блоге Зейна Набулсиса.

Другие советы

sed (и ему подобные) содержатся в нескольких пакетах команд Unix.

  • Сигвин работает, но гигантский.
  • UnxUtils намного тоньше.
  • ГнуВин32 это еще один порт, который работает.
  • Другая альтернатива — исследование AT&T Research. система УВИН.
  • МСИС от MinGw — еще один вариант.
  • Подсистема Windows для Linux — самый «родной» вариант, но он не установлен в Windows по умолчанию;в нем есть sed, grep и т. д.из коробки, однако.
  • https://github.com/mbuilov/sed-windows предлагает последние версии 4.3 и 4.4, которые поддерживают -z вариант в отличие от перечисленных верхних портов

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

cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt

где старые пат и новые пат Шаблоны регулярных выражений Microsoft vbscript.Очевидно, я реализовал только команду замены и кое-что предположил, но вы могли бы конкретизировать ее, чтобы быть умнее и понимать больше sed командная строка.

Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
  inp = WScript.StdIn.ReadLine()
  WScript.Echo rxp.Replace(inp, patparts(2))
Loop

UnxUtils предоставляет sed для Win32, как и GNUWin32.

Если вы не хотите ничего устанавливать (я предполагаю, что вы хотите добавить сценарий в какое-то решение/программу/и т. д., которое будет запускаться на других машинах), вы можете попробовать создать сценарий vbs (скажем, replace.vbs):

Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText
objFile.Close

И вы запускаете это так:

cscript replace.vbs "C:\One.txt" "Robert" "Rob"

Это похоже на версию sed, предоставленную «bill weaver», но я думаю, что она более дружелюбна с точки зрения специальных символов (' > </ ).

Кстати, не я это писал, но не могу вспомнить, откуда это взял.

Есть Супер Сед расширенная версия sed.Для Windows это отдельный .exe-файл, предназначенный для запуска из командной строки.

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

http://sourceforge.net/projects/fart-it/

> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt

Это поведение

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt

Вы можете установить Cygwin (http://www.cygwin.com/) и используйте sed оттуда.

Можешь попробовать powershell.Есть получить контент и набор-контент Встроенные командлеты, которые вы можете использовать.

я использую Сигвин.Я сталкиваюсь со многими людьми, которые не осознают, что если вы поместите двоичные файлы Cygwin в свой PATH, вы сможете использовать их из командной оболочки Windows.Вам не обязательно запускать Cygwin's Bash.

Вы также можете изучить Службы Windows для Unix доступен от Microsoft (но только в версиях Windows Professional и выше).

Эдлин или отредактируйте

плюс есть службы Windows для Unix, в состав которых входит множество инструментов Unix для Windows.http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

Обновление 12/7/12 в Windows 2003 R2, Windows 7 & Server 2008 и т. Д.вышеизложенное заменяется Подсистемой для UNIX-приложений (SUA) в качестве дополнения.Но вам придется скачать утилиты:http://www.microsoft.com/en-us/download/details.aspx?id=2391

Вы могли бы посмотреть Инструменты GNU, они предоставляют (помимо прочего) sed для Windows.

Для Windows существует вспомогательный пакетный файл под названием repl.bat который имеет большую часть возможностей SED, но doesn't require any additional download или установка.Это гибридный пакетный файл, который использует Jscript для реализации функций и так есть swift, и doesn't suffer from the usual poison characters пакетной обработки и легко обрабатывает пустые строки.

Скачать repl от - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

Автор — @dbenham из stack overflow и dostips.com.

Еще один вспомогательный пакетный файл под названием findrepl.bat дает пользователю Windows большую часть возможностей GREP и также основано на Jscript и также является гибридным пакетным файлом.Он разделяет преимущества repl.bat.

Скачать findrepl от - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

Автор — @aacini из stack overflow и dostips.com.

Насколько я знаю, ничего подобного sed не входит в комплект Windows.Однако sed доступен для Windows в нескольких различных формах, в том числе как часть Cygwin, если вам нужна полноценная подсистема POSIX, или как собственный исполняемый файл Win32, если вы хотите запускать только sed из командной строки.

Sed для Windows (проект GnuWin32)

Если он должен быть родным для Windows, единственное, что я могу предложить, — это использовать язык сценариев, поддерживаемый Windows, без надстроек, например VBScript.

Cygwin работает, но эти коммунальные услуги также доступны.Просто поместите их на свой диск, поместите каталог в свой путь, и вы получите множество дружественных утилит Unix.ИМХО, более легкий, чем Cygwin (хотя он работает так же хорошо).

Мне нужен был инструмент sed, который работал бы с приглашением Windows cmd.exe. Порт Эрика Пемента СЭД в один DOS .exe у меня отлично сработало.

Это очень хорошо задокументировано.

Это работает на Vista Ultimate, насчет Pro не уверен.

sed -f commandfilename.cmd file1 > file2
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top