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



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



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

775   17  

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,grep etc. из коробки, однако.
  • 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

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

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

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

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

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

вы можете установить 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 отлично сработало для меня.

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

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

sed-f commandfilename.cmd file1 > file2

Comments

    Ничего не найдено.