Pergunta

Eu quero programaticamente o conteúdo do arquivo editar usando janelas comando linha ( cmd.exe ). Em * nix há sed para essas tarefas. Existe algum equivalente útil no windows?

Editar:. Estou à procura de solução de linha de comando nativa

Foi útil?

Solução

Hoje PowerShell me salvou.

Para grep existe:

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

e para sed existe:

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

Para mais detalhes consulte Zain Naboulsis blogue entrada.

Outras dicas

sed (e sua laia) estão contidos dentro de vários pacotes de comandos Unix.

Se você não deseja instalar qualquer coisa e seu sistema não é um Windows Server um, então você pode usar uma linguagem de script (VBScript por exemplo) para isso. Abaixo está uma, off-the-cuff facada bruto a ele. Sua linha de comando seria parecido

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

onde oldpat e newpat são Microsoft VBScript padrão regex . Obviamente eu só implementou o comando de substituição e assumiu algumas coisas, mas você poderia completá-lo para ser mais inteligente e entender mais sobre a linha de comando 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

UnxUtils fornece sed para Win32, assim como GnuWin32 .

Se você não quer instalar nada (eu suponho que você deseja adicionar o script em alguma solução / programa / etc que será executado em outras máquinas), você pode tentar criar um script vbs (digamos, substituir. 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

E você executá-lo como este:

cscript replace.vbs "C:\One.txt" "Robert" "Rob"

O que é semelhante à versão sed fornecido pelo "tecelão lei", mas acho que este é mais amigável em termos de especial ('>

Btw, eu não escrever isso, mas não me lembro onde eu tenho que partir.

Não é Super Sed uma versão melhorada do sed. Para o Windows este é um .exe autônomo, destina-se a correr a partir da linha de comando.

Tente fart.exe. É um utilitário de Localizar e substituir-texto que pode ser usado em programas de lote de comando.

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

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

Este é um comportamento de

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

Você pode instalar Cygwin ( http://www.cygwin.com/ ) e uso sed de lá .

Você poderia tentar PowerShell. Há get-content e set-content commandlets construção em que você poderia usar.

Eu uso Cygwin . Eu me deparo com um monte de pessoas que não percebem que se você colocar os binários Cygwin em seu caminho, você pode usá-los de dentro do shell de comando do Windows. Você não tem que correr Bash do Cygwin.

Você também pode olhar para o Windows Services for Unix disponibilizado pela Microsoft (mas apenas na Professional e acima de versões do Windows).

edlin ou editar

além de existir o Windows Services for Unix que vem com muitas ferramentas UNIX para Windows. http://technet.microsoft.com/en-us/interopmigration/bb380242. aspx

Atualização 12/7/12 No Windows 2003 R2, Windows 7 e Server 2008, etc. A descrição acima é substituído pelo subsistema para aplicações UNIX-Based (SUA) como um add-on. Mas você tem que baixar os utilitários: http://www.microsoft.com/en-us/ download / details.aspx? id = 2391

Você pode olhar para GNU Tools , eles fornecem (entre outras coisas) sed no Windows.

Há um arquivo de lote ajudante para Windows chamado repl.bat que tem muito da capacidade do SED, mas doesn't require any additional download ou instalação. É um arquivo de lote híbrido que usa Jscript para implementar os recursos e assim é swift e doesn't suffer from the usual poison characters de processamento em lote e alças linhas em branco com facilidade.

Fazer download repl de - https://www.dropbox.com/s/qidqwztmetbvklt/ repl.bat

O autor é @dbenham de estouro de pilha e dostips.com

Outro arquivo de lote auxiliar chamado findrepl.bat dá ao usuário do Windows muito do capabilty de GREP e também é baseado em Jscript e é também um arquivo de lote híbrido. Ele compartilha os benefícios do repl.bat

Fazer download findrepl de - https://www.dropbox.com/s/rfdldmcb6vwi9xc/ findrepl.bat

O autor é @aacini de estouro de pilha e dostips.com

Tanto quanto eu sei nada como sed é empacotado com janelas. No entanto, sed está disponível para Windows em várias formas diferentes, incluindo como parte de Cygwin, se você quiser um subsistema completo POSIX, ou como um executável nativo Win32 se você quiser rodar apenas sed na linha de comando.

Sed para Windows (GnuWin32 Projeto)

Se ele precisa ser nativo para Windows, então a única outra coisa que posso sugerir seria a utilização de uma linguagem de script suportada pelo Windows sem add-ons, como VBScript.

Cygwin funciona, mas esses utilitários também estão disponíveis. Apenas plop-los em seu carro, coloque o diretório em seu caminho, e você tem muitos de seus utilitários Unix amigáveis. Lighterweight IMHO que Cygwin (embora isso funciona tão bem).

Eu precisava de uma ferramenta sed que funcionou para Windows CMD.exe pronta. porto de Eric de Pement sed para um único DOS .exe trabalhou muito para mim .

É muito bem documentado .

Isso funciona em Vista Ultimate, não tenho certeza sobre Pro.

sed -f commandfilename.cmd file1 > file2
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top