Я хочу программно редактировать содержимое файла с помощью командной строки Windows ( cmd.exe ). В * nix есть sed для этой задачи. Есть ли полезный родной эквивалент в Windows?
Что вы подразумеваете под "родным" ??? Устанавливается для работы в cmd.exe или для работы без установки вообще? Если первое, см. GnuWin32 ref'd ниже; если последнее, нет. Нет предустановленного родного седа для windows.
Майкл Паукуонис
6
Под нативным я имел в виду решение, которое работает на всех окнах без установки дополнительных вещей.
Якуб Штурц
1
Оставьте cmd.exe позади и используйте вместо него PowerShell.
Кроме того: если вы хотите вызвать его из обычного cmd, просто @powershell -Command "get-content ...". Единственное предостережение заключается в том, что вы должны избегать кавычек: ... -Command "get-content ... \" expression \ ", ..."
Tarc
1
@Tarc AFAIR, вы можете использовать одинарные кавычки в вашей команде и использовать двойные кавычки вместо этой команды
2
Я попробовал это сегодня на файле, чтобы удалить некоторые вещи между кавычками в определенных местах, только чтобы обнаружить, что выходной файл был почти в два раза больше оригинала. Причина, по-видимому, заключается в том, что этот метод изменил способ обработки строк в файле, чтобы использовать «\ r \ n» вместо «\ n».
user132278 26.09.16
1
Удвоение из-за \ r \ n будет означать, что ваш файл состоит исключительно из новых строк. Вот настоящая причина: кодирование .
Подсистема Windows для Linux является наиболее «родной» опцией, но по умолчанию она не установлена в Windows; он имеет sed, и grepт.д. из коробки, хотя.
Если вы не хотите ничего устанавливать и ваша система не является Windows Server, тогда вы можете использовать для этого язык сценариев (например, VBScript). Внизу - грубый, неожиданный удар. Ваша командная строка будет выглядеть
где 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 - самое легкое решение.
Якуб Штурц
7
GnuWin32 - это нативное решение, если вы имеете в виду нативный язык, предназначенный для работы в «нормальной» среде Windows (в отличие от CygWin). Попробуйте их, и вы начнете ожидать, что они будут в КАЖДОЙ системе Windows, которую вы используете. !!!
Майкл Паукуонис
3
Работает для моего случая! Кроме того, не забудьте опцию "// NoLogo" cscript.
Марко Думик
4
Если это не так, подумайте, как выглядит ваш другой код! Удивительно, спасибо.
Сабунку
2
Аналогичная утилита поиска и замены регулярных выражений может быть выполнена с помощью JScript. Преимущество JScript над VBScript заключается в том, что его можно легко комбинировать с пакетами в одном скрипте, что упрощает использование утилиты в контексте пакета или командной строки. Доступна надежная гибридная утилита JScript / batch под названием REPL.BAT . У этого есть много параметров командной строки. Полная документация встроена в скрипт. Это, конечно, не имеет полной возможности sed, но даже в этом случае, это довольно мощный.
Если вы не хотите ничего устанавливать (я предполагаю, что вы хотите добавить скрипт в какое-то решение / программу / и т. Д., Который будет запускаться на других машинах), вы можете попробовать создать скрипт vbs (скажем, replace.vbs):
Это, вероятно, две вещи в PowerShell, которые в наименьшей степени способствуют тому, что sedделает ;-). -replaceОператор, вероятно, лучше предложение.
Джои
7
Попробуйте fart.exe. Это утилита поиска и замены текста, которую можно использовать в пакетных программах команд.
Я использую Cygwin . Я сталкиваюсь со многими людьми, которые не понимают, что если вы поместите двоичные файлы Cygwin в PATH, вы сможете использовать их из командной оболочки Windows. Вам не нужно запускать Cygwin's Bash.
Вы также можете посмотреть на службы Windows для Unix, доступные от Microsoft (но только в Профессиональной и более поздних версиях Windows).
Обновление 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который имеет большую часть возможностей SED, но doesn't require any additional downloadили установки. Это гибридный пакетный файл, который используется Jscriptдля реализации функций и так далее swift, doesn't suffer from the usual poison charactersпакетной обработки и с легкостью обрабатывает пустые строки.
Автор @dbenham из переполнения стека и dostips.com
Другой вспомогательный пакетный файл с именем findrepl.batдает пользователю Windows большую часть возможностей, GREPа также основан на Jscriptгибридном пакетном файле. Он разделяет преимущества repl.bat
Ссылка на дропбокс для repl недоступна. У вас есть дополнительная ссылка?
Вишал Ананд
2
Насколько я знаю, ничего похожего на sed в комплекте с окнами. Однако sed доступен для Windows в нескольких различных формах, в том числе как часть Cygwin, если вам нужна полноценная подсистема POSIX, или как собственный исполняемый файл Win32, если вы хотите запускать просто sed из командной строки.
Если он должен быть встроенным в Windows, то единственное, что я могу предложить, - это использовать язык сценариев, поддерживаемый Windows, без надстроек, таких как VBScript.
Cygwin работает, но эти утилиты также доступны. Просто поместите их на свой диск, поместите каталог в свой путь, и у вас есть много ваших дружественных утилит unix. Облегченный ИМХО, что Cygwin (хотя это работает так же хорошо).
@royhowie: Понятно. Хотя некоторые из этих ответов могут быть кому-то полезны, я согласен, что сам вопрос не совсем подходит для SO. ОТО, я не чувствую себя способным рекомендовать полное удаление.
PM 2Ring
В этой ситуации я думаю, что было бы трудно включить основные части ответа, так как основная часть - это файл .exe, который размещается на связанной странице. Я полностью понимаю беспокойство по поводу link-rot, я просто не уверен, как я могу сделать это автономным для SO.
Брайан Кеннеди
Спасибо за улов, a_horse_with_no_name. Я был неаккуратен с моим языком. Я отредактировал свой комментарий, чтобы исправить указанную вами проблему.
Ответы:
Сегодня PowerShell спас меня.
Ибо
grep
есть:или
и
sed
есть:Для более подробной информации смотрите запись в блоге Zain Naboulsis .
источник
sed
(и тому подобное) содержатся в нескольких пакетах команд Unix.sed
, иgrep
т.д. из коробки, хотя.-z
опцию в отличие от перечисленных верхних портовЕсли вы не хотите ничего устанавливать и ваша система не является Windows Server, тогда вы можете использовать для этого язык сценариев (например, VBScript). Внизу - грубый, неожиданный удар. Ваша командная строка будет выглядеть
где oldpat и newpat - шаблоны регулярных выражений Microsoft vbscript . Очевидно, что я реализовал только команду замены и предположил некоторые вещи, но вы могли бы сделать это более умным и лучше понять
sed
командную строку.источник
UnxUtils предоставляет sed для Win32, как и GNUWin32 .
источник
Если вы не хотите ничего устанавливать (я предполагаю, что вы хотите добавить скрипт в какое-то решение / программу / и т. Д., Который будет запускаться на других машинах), вы можете попробовать создать скрипт vbs (скажем, replace.vbs):
И вы запускаете это так:
Это похоже на версию sed, предоставляемую «bill weaver», но я думаю, что эта версия более дружелюбна с точки зрения специальных ('> </) символов.
Кстати, я не писал это, но я не могу вспомнить, откуда я это взял.
источник
Существует супер Sed расширенная версия СЭД. Для Windows это отдельный .exe-файл, предназначенный для запуска из командной строки.
источник
Это поведение
источник
Вы можете попробовать PowerShell. Есть встроенные командлеты get-content и set-content, которые вы можете использовать.
источник
sed
делает ;-).-replace
Оператор, вероятно, лучше предложение.Попробуйте fart.exe. Это утилита поиска и замены текста, которую можно использовать в пакетных программах команд.
http://sourceforge.net/projects/fart-it/
источник
Вы можете установить Cygwin ( http://www.cygwin.com/ ) и использовать оттуда sed.
источник
Я использую Cygwin . Я сталкиваюсь со многими людьми, которые не понимают, что если вы поместите двоичные файлы Cygwin в PATH, вы сможете использовать их из командной оболочки Windows. Вам не нужно запускать Cygwin's Bash.
Вы также можете посмотреть на службы Windows для Unix, доступные от Microsoft (но только в Профессиональной и более поздних версиях Windows).
источник
редактировать или редактировать
Кроме того, есть службы 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 Tools , они предоставляют (помимо прочего) sed на окнах.
источник
Существует вспомогательный командный файл для 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.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.
источник
Cygwin работает, но эти утилиты также доступны. Просто поместите их на свой диск, поместите каталог в свой путь, и у вас есть много ваших дружественных утилит unix. Облегченный ИМХО, что Cygwin (хотя это работает так же хорошо).
источник
Мне нужен инструмент sed, который работал для приглашения Windows cmd.exe. Порт sed Эрика Пимента в один DOS .exe отлично работал для меня.
Это довольно хорошо задокументировано .
источник