2008-09-24 4 views
121

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

Редактировать: Я ищу встроенное решение командной строки.

+1

Что вы имеете в виду под «родной» ??? Устанавливается для работы в cmd.exe или для работы без установки вообще? Если первое, см. Ниже GnuWin32; если последний, нет. Нет предустановленных собственных sed для окон. – 2009-05-26 13:10:19

+2

По-родному я подразумевал решение, которое работает на всех окнах без установки дополнительного материала. – 2009-05-26 17:34:38

+1

Оставьте файл cmd.exe и вместо этого используйте PowerShell. – 2015-01-01 14:59:39

ответ

77

sed (и его ilk) содержатся в нескольких пакетах команд Unix.

  • Cygwin работает, но является гигантским.
  • UnxUtils намного тоньше.
  • GnuWin32 - это еще один порт, который работает.
  • Другая альтернатива - AT & T Research UWIN system.
  • MSYS от MinGw - еще один вариант.
  • Windows Subsystem for Linux является наиболее «родным» вариантом, но по умолчанию он не установлен на Windows; однако у него есть sed, grep и т. д..
  • https://github.com/mbuilov/sed-windows предлагает последние 4,3 и 4,4 версии, которые поддерживают -z option в отличие от перечисленных верхних портов

Если вы не хотите ничего устанавливать и ваша система не является Windows Server один, то вы могли использовать для этого используется язык сценариев (например, VBScript). Ниже приведена грубая, одетая в него манжета. Ваша командная строка будет выглядеть

cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ <inpfile.txt> outfile.txt 

где oldpat и newpat являются Microsoft vbscript regex patterns. Очевидно, что я только выполнил замену команды и принял некоторые вещи, но вы могли бы использовать ее умнее и понять больше из командной строки 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 
4

Edlin или редактировать

плюс есть Windows Services для Unix, которая поставляется с большим количеством инструментов Unix для окон. 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

+3

Оба не существуют больше в 64-разрядных версиях Windows. – Joey 2010-04-21 08:51:23

3

Вы можете посмотреть GNU Tools, они обеспечивают (среди прочего) sed на окнах.

1

Cygwin работает, но these Утилиты также доступны. Просто плюньте их на свой диск, поместите каталог на свой путь, и у вас есть много ваших дружественных утилит unix. Ослабьте ИМХО, что Cygwin (хотя это работает так же хорошо).

2

Насколько я знаю, ничего подобного sed не связано с окнами. Однако sed доступен для Windows в нескольких разных формах, в том числе в составе Cygwin, если вы хотите полноценную подсистему POSIX или как исполняемый исполняемый файл Win32, если вы хотите запускать только sed в командной строке.

Sed for Windows (GnuWin32 Project)

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

6

Вы можете попробовать powershell. Есть get-content и set-content командах, которые вы можете использовать.

+4

Возможно, это две вещи в PowerShell, которые вносят наименьший вклад в то, что делает `sed` ;-). Вероятно, оператор `-replace` является лучшим предложением. – Joey 2010-04-21 08:51:05

6

Использую Cygwin. Я сталкиваюсь с множеством людей, которые не понимают, что если вы ставите бинарные файлы Cygwin на свой PATH, вы можете использовать их из командной оболочки Windows. Вам не нужно запускать Cygwin's Bash.

Вы также можете заглянуть в Windows Services for Unix, доступный от Microsoft (но только на профессиональных и вышеперечисленных версиях Windows).

0

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

СЕПГ -f commandfilename.cmd file1> file2

8

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

16

Если вы не хотите ничего устанавливать (предположим, вы хотите добавить скрипт в какое-то решение/программу/etc, которое будет запущено на других машинах), вы можете попробовать создать скрипт 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 версии, представленной «вексельного ткача», но я думаю, что это один является более дружественным с точки зрения специальный ('> < /) персонажей.

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

84

Сегодня powershell спас меня.

Для grep есть:

get-content somefile.txt | where { $_ -match "expression"} 

и sed есть:

get-content somefile.txt | %{$_ -replace "expression","replace"} 

Более подробно см Zain Naboulsis blog entry.

4
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt 

Это поведение

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt 
1

Существует вспомогательный командный файл для 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, большая часть capabilty из GREP и также основана на Jscript и также представляет собой гибридный пакетный файл. Он разделяет преимущества repl.bat

Скачать findrepl из - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

Автор является @aacini от переполнения стека и dostips.com

 Смежные вопросы

  • Нет связанных вопросов^_^