Есть ли подобная утилита для 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 - еще один порт, который работает.
- Другой альтернативой является система UWIN от AT&T Research.
- MSYS от 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
где oldpat и newpat - шаблоны регулярных выражений 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
Если вы не хотите ничего устанавливать (я предполагаю, что вы хотите добавить скрипт в какое-то решение / программу / и т. Д., Который будет запускаться на других машинах), вы можете попробовать создать скрипт 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", но я думаю, что эта версия более дружественна с точки зрения специальных (' > ) символов.
Кстати, я не писал это, но я не могу вспомнить, откуда я это взял.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
Это поведение
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Super Sed - это улучшенная версия sed. Для Windows это отдельный.exe-файл, предназначенный для запуска из командной строки.
Вы можете попробовать PowerShell. Есть встроенные командлеты get-content и set-content, которые вы можете использовать.
Попробуйте fart.exe. Это утилита поиска и замены текста, которую можно использовать в пакетных программах команд.
Я использую Cygwin. Я сталкиваюсь со многими людьми, которые не понимают, что если вы поместите двоичные файлы Cygwin в PATH, вы сможете использовать их из командной оболочки Windows. Вам не нужно запускать Cygwin's Bash.
Вы также можете изучить службы Windows для Unix, доступные от Microsoft (но только в Professional и более поздних версиях Windows).
Вы можете установить Cygwin ( http://www.cygwin.com/) и использовать оттуда sed.
Редактировать или редактировать
Кроме того, есть службы 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
Существует вспомогательный командный файл для Windows, который называется repl.bat
который имеет большую часть способности САС, но 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.bat
Скачать findrepl
от - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
Автор @aacini из переполнения стека и dostips.com
Насколько я знаю, ничего похожего на sed в комплекте с окнами. Однако sed доступен для Windows в нескольких различных формах, в том числе как часть Cygwin, если вам нужна полноценная подсистема POSIX, или как собственный исполняемый файл Win32, если вы хотите запускать просто sed из командной строки.
Sed для Windows (проект GnuWin32)
Если он должен быть встроенным в Windows, единственное, что я могу предложить, - это использовать язык сценариев, поддерживаемый Windows, без надстроек, таких как VBScript.
Вы могли бы взглянуть на GNU Tools, они предоставляют (среди прочего) sed на окнах.
Cygwin работает, но эти утилиты также доступны. Просто поместите их на свой диск, поместите каталог в свой путь, и у вас есть много ваших дружественных утилит unix. Облегченный ИМХО, что Cygwin (хотя это работает так же хорошо).
Мне нужен инструмент sed, который работал для приглашения Windows cmd.exe. Порт sed Эрика Пимента в один DOS .exe отлично работал для меня.
Это довольно хорошо задокументировано.
Это работает на Vista Ultimate, не уверен, Pro.
sed -f имя_файла_файла.cmd файл1 > файл2