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

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

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

17 ответов


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

на grep есть:

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

и sed есть:

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

Подробнее см. запись в блоге Zain Naboulsis.


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

  • Cygwin работает, но гигантские.
  • UnxUtils гораздо стройнее.
  • GnuWin32 еще один порт, который работает.
  • Другой альтернативой является AT & T Research's система UWIN.
  • префикса msys из MinGw еще один выбор.
  • Подсистема Windows для Linux является наиболее "родной" вариант, но он не установлен на Windows по умолчанию; он имеет sed, grep etc. но из коробки.
  • https://github.com/mbuilov/sed-windows предлагает последние версии 4.3 и 4.4, которые поддерживают -z опции в отличие от перечисленных верхние порты

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

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

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

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 (скажем, заменить.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, предоставленную "Биллом Уивером", но я думаю, что этот более дружелюбен с точки зрения специальных (' >

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


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


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

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


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


вы можете попробовать powershell. Есть get-content и set-content этого построения в том, что вы могли бы использовать.


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

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


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

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

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

edlin или edit

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

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


вы могли бы посмотреть на инструменты GNU, Они обеспечивают (среди прочего) sed на окнах.


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

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

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


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


существует вспомогательный пакетный файл для 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 из переполнения стека и dostips.com

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

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

автор @aacini из переполнения стека и dostips.com


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

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


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

sed-f commandfilename.cmd file1 > file2