Есть ли какая-либо sed как утилита для cmd.exe? [закрытый]
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
Если вы не хотите ничего устанавливать (я предполагаю, что вы хотите добавить скрипт в какое-то решение/программу/и т. д., которые будут запускаться на других машинах), вы можете попробовать создать скрипт 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, предназначенный для запуска из командной строки.
попробуй пукнуть.исполняемый. Это утилита поиска и замены текста, которая может использоваться в командных пакетных программах.
вы можете установить 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 отлично сработало для меня.
Это хорошо документирована.