17 ответов:
сегодня powershell спас меня.
на
grepесть:get-content somefile.txt | where { $_ -match "expression"}и
sedесть:get-content somefile.txt | %{$_ -replace "expression","replace"}Подробнее см. запись в блоге Zain Naboulsis.
sed(и ему подобные) содержатся в нескольких пакетах команд Unix.
- программа работает, но гигантские.
- UnxUtils гораздо стройнее.
- GnuWin32 еще один порт, который работает.
- Другой альтернативой является AT&T Research's система UWIN.
- MSYS от MinGw еще один выбор.
- Подсистема Windows для Linux является наиболее "родной" вариант, но он не установлен на Windows по умолчанию; он имеет
sed,grepetc. из коробки, однако.- https://github.com/mbuilov/sed-windows предлагает последние версии 4.3 и 4.4, которые поддерживают
-zопции в отличие от перечисленных верхние портыесли вы не хотите ничего устанавливать, и ваша система не является Windows Server one, тогда ты мог бы для этого используйте язык сценариев (например, 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, предоставленную "bill weaver", но я думаю, что этот более дружелюбен с точки зрения специальных (' >
кстати, я не писал этого, но я не могу вспомни, откуда я его взял.
здесь Super Sed Расширенная версия sed. Для Windows это автономно .exe, предназначенный для запуска из командной строки.
попробуй пукнуть.исполняемый. Это утилита поиска и замены текста, которая может использоваться в командных пакетных программах.
вы можете установить Cygwin (http://www.cygwin.com/) и использовать sed оттуда.
вы можете попробовать powershell. Есть get-content и set-content этого построения в том, что вы могли бы использовать.
Я использую программа. Я сталкиваюсь со многими людьми, которые не понимают, что если вы поместите двоичные файлы 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 & Server 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.летучая мышьскачать
findreplот -https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.batавтор @aacini от переполнения стека и dostips.com
Мне нужен был инструмент sed, который работал для Windows cmd.exe в командной строке. порт Эрика Пента sed для одного DOS .exe отлично сработало для меня.
Это хорошо документирована.
Comments