Existe algum sed como utilitário para cmd.exe? [fechadas]
149
Desejo editar programaticamente o conteúdo do arquivo usando a linha de comando do Windows ( cmd.exe ). No * nix, existe sed para essas tarefas. Existe algum equivalente nativo útil no Windows?
O que você quer dizer com "nativo" ??? Instalável para funcionar no cmd.exe ou para trabalhar sem instalação? Se o primeiro, consulte o GnuWin32 ref'd abaixo; se o último, não. Nenhum sed nativo pré-instalado para Windows.
Michael Paulukonis
6
Por nativo, quis dizer solução que roda em todas as janelas sem instalar coisas adicionais.
Além disso: se você quiser chamá-lo do cmd normal, basta @powershell -Command "get-content ...". A única ressalva é que você deve escapar aspas: ... -Command "get-content ... \" A expressão \ "..."
Tarc
1
@Tarc AFAIR, você pode usar aspas simples em seu comando e usar aspas duplas para citar o comando em vez
2
Tentei isso hoje em um arquivo para remover algumas coisas entre aspas em certos lugares, apenas para descobrir que a saída era um arquivo quase duas vezes maior que o original. O motivo parecia ser que esse método alterava a maneira como as novas linhas eram tratadas no arquivo para usar "\ r \ n" em vez de "\ n".
user132278
1
A duplicação devido a \ r \ n implicaria que seu arquivo era composto apenas de novas linhas. Aqui está o verdadeiro motivo: codificação .
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 facada nojenta. Sua linha de comando se pareceria
onde oldpat e newpat são padrões de regex do Microsoft vbscript . Obviamente, eu apenas implementei o comando substituto e assumi algumas coisas, mas você poderia torná-lo mais inteligente e entender melhor a sedlinha de comando.
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
Não é exatamente isso que eu quero, mas acredito que a dependência do VBS é a solução mais leve.
Jakub Šturc 24/09/08
7
O GnuWin32 é uma solução nativa, se por nativo você quer dizer que foi projetado para ser executado no ambiente "normal" do Windows (diferente do CygWin). Experimente e você começará a esperar que eles estejam em TODOS os sistemas Windows que você usa. !!!
Michael Paulukonis
3
Funciona para o meu caso! Além disso, não esqueça a opção cscript "// NoLogo".
precisa saber é o seguinte
4
Se isso é "fora do punho", pergunte-se como é o seu outro código! Incrível, obrigado.
Sabuncu
2
Um utilitário de pesquisa e substituição de regex semelhante pode ser feito com o JScript. A vantagem do JScript sobre o VBScript é que ele pode ser facilmente combinado com o lote em um único script, facilitando o uso do utilitário em um contexto de lote ou linha de comando. Um robusto utilitário JScript / lote híbrido chamado REPL.BAT está disponível . Possui muitas opções de linha de comando. A documentação completa está incorporada no script. Certamente não possui capacidade total de sed, mas, mesmo assim, é bastante poderoso.
Se você não quiser instalar nada (suponho que você queira adicionar o script em alguma solução / programa / etc que será executado em outras máquinas), tente criar um script vbs (digamos, replace.vbs):
Essas são provavelmente as duas coisas no PowerShell que menos contribuem para o que sedfaz ;-). O -replaceoperador é provavelmente uma sugestão melhor.
Joey
7
Tente fart.exe. É um utilitário Localizar e substituir texto que pode ser usado em programas em lote de comandos.
Eu uso Cygwin . Eu encontro muitas pessoas que não percebem que, se você colocar os binários Cygwin no PATH, poderá usá-los no shell de comando do Windows. Você não precisa executar o Cygwin's Bash.
Você também pode procurar no Windows Services for Unix disponível na Microsoft (mas apenas nas versões Professional e superior do Windows).
Atualização 12/7/12 No Windows 2003 R2, Windows 7 e Server 2008, etc., o acima é substituído pelo Subsistema para aplicativos baseados em UNIX (SUA) como um complemento. Mas você precisa baixar os utilitários:
http://www.microsoft.com/en-us/download/details.aspx?id=2391
Existe um arquivo de lote auxiliar para o Windows chamado repl.batque possui grande capacidade do SED, mas doesn't require any additional downloadou instalação. É um arquivo de lote híbrido que utiliza Jscriptpara implementar os recursos e assim é swift, e doesn't suffer from the usual poison charactersde processamento em lote e alças linhas em branco com facilidade.
O autor é @dbenham do stack overflow e dostips.com
Outro arquivo de lote auxiliar chamado findrepl.batfornece ao usuário do Windows grande parte da capacidade GREPe também é baseado emJscript e também é um arquivo em lote híbrido. Ele compartilha os benefícios do repl.bat
O link da caixa de depósito para repl está inativo. Você tem um link secundário?
Vishal Anand
2
Tanto quanto eu sei, nada como sed está empacotado com janelas. No entanto, o sed está disponível para Windows em várias formas diferentes, incluindo como parte do Cygwin, se você deseja um subsistema POSIX completo ou como um executável nativo do Win32, se você deseja executar apenas o sed na linha de comando.
Se precisar ser nativo do Windows, a única outra coisa que posso sugerir seria usar uma linguagem de script suportada pelo Windows sem complementos, como o VBScript.
O Cygwin funciona, mas esses utilitários também estão disponíveis. Basta colocá-los em sua unidade, colocar o diretório em seu caminho e você terá muitos de seus utilitários amigáveis para unix. IMHO mais leve que Cygwin (embora isso funcione tão bem).
A pergunta é sobre o Windows (cmd.exe) e não sobre DOS
a_horse_with_no_name
@royhowie: Entendo. Embora algumas dessas respostas possam ser úteis para alguém, concordo que a pergunta em si não é realmente adequada para SO. OTOH, não me sinto qualificado para recomendar a exclusão por atacado.
PM 2Ring
Nessa situação, acho que seria difícil incluir as partes essenciais da resposta, já que a parte essencial é um arquivo .exe hospedado na página vinculada. Entendo totalmente a preocupação com o rot-link, não tenho certeza de como poderia tornar isso independente para SO.
Bryan kennedy
Obrigado pela captura, a_horse_with_no_name. Eu estava sendo desleixado com o meu idioma. Eu editei meu comentário para corrigir o problema que você apontou.
Respostas:
Hoje o PowerShell me salvou.
Pois
grep
existe:ou
e porque
sed
existe:Para mais detalhes, consulte a entrada do blog de Zain Naboulsis .
fonte
sed
(e seu ilk) estão contidos em vários pacotes de comandos do Unix.sed
,grep
etc. fora da caixa, no entanto.-z
opção diferente das portas superiores listadasSe 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 facada nojenta. Sua linha de comando se pareceria
onde oldpat e newpat são padrões de regex do Microsoft vbscript . Obviamente, eu apenas implementei o comando substituto e assumi algumas coisas, mas você poderia torná-lo mais inteligente e entender melhor a
sed
linha de comando.fonte
O UnxUtils fornece sed para o Win32, assim como o GNUWin32 .
fonte
Se você não quiser instalar nada (suponho que você queira adicionar o script em alguma solução / programa / etc que será executado em outras máquinas), tente criar um script vbs (digamos, replace.vbs):
E você executa assim:
O que é semelhante à versão sed fornecida pelo "bill weaver", mas acho que essa é mais amigável em termos de caracteres especiais ('> </).
Btw, eu não escrevi isso, mas não me lembro de onde eu consegui.
fonte
Há Super Sed, uma versão aprimorada do sed. Para o Windows, este é um .exe independente, destinado à execução na linha de comando.
fonte
Esse é o comportamento de
fonte
Você pode tentar o PowerShell. Existem comandoslet get-content e set-content que você pode usar.
fonte
sed
faz ;-). O-replace
operador é provavelmente uma sugestão melhor.Tente fart.exe. É um utilitário Localizar e substituir texto que pode ser usado em programas em lote de comandos.
http://sourceforge.net/projects/fart-it/
fonte
Você pode instalar o Cygwin ( http://www.cygwin.com/ ) e usar o sed a partir daí.
fonte
Eu uso Cygwin . Eu encontro muitas pessoas que não percebem que, se você colocar os binários Cygwin no PATH, poderá usá-los no shell de comando do Windows. Você não precisa executar o Cygwin's Bash.
Você também pode procurar no Windows Services for Unix disponível na Microsoft (mas apenas nas versões Professional e superior do Windows).
fonte
edlin ou editar
além disso, há 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., o acima é substituído pelo Subsistema para aplicativos baseados em UNIX (SUA) como um complemento. Mas você precisa baixar os utilitários: http://www.microsoft.com/en-us/download/details.aspx?id=2391
fonte
Você pode olhar para o GNU Tools , que fornece (entre outras coisas) sed no Windows.
fonte
Existe um arquivo de lote auxiliar para o Windows chamado
repl.bat
que possui grande capacidade do SED, masdoesn't require any additional download
ou instalação. É um arquivo de lote híbrido que utilizaJscript
para implementar os recursos e assim éswift
, edoesn't suffer from the usual poison characters
de processamento em lote e alças linhas em branco com facilidade.Download
repl
de - https://www.dropbox.com/s/qidqwztmetbvklt/repl.batO autor é @dbenham do stack overflow e dostips.com
Outro arquivo de lote auxiliar chamado
findrepl.bat
fornece ao usuário do Windows grande parte da capacidadeGREP
e também é baseado emJscript
e também é um arquivo em lote híbrido. Ele compartilha os benefícios do repl.batDownload
findrepl
de - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.batO autor é @aacini do estouro de pilha e dostips.com
fonte
Tanto quanto eu sei, nada como sed está empacotado com janelas. No entanto, o sed está disponível para Windows em várias formas diferentes, incluindo como parte do Cygwin, se você deseja um subsistema POSIX completo ou como um executável nativo do Win32, se você deseja executar apenas o sed na linha de comando.
Sed para Windows (Projeto GnuWin32)
Se precisar ser nativo do Windows, a única outra coisa que posso sugerir seria usar uma linguagem de script suportada pelo Windows sem complementos, como o VBScript.
fonte
O Cygwin funciona, mas esses utilitários também estão disponíveis. Basta colocá-los em sua unidade, colocar o diretório em seu caminho e você terá muitos de seus utilitários amigáveis para unix. IMHO mais leve que Cygwin (embora isso funcione tão bem).
fonte
Eu precisava de uma ferramenta sed que funcionasse para o prompt do cmd.exe do Windows. A porta de sed de Eric Pement para um único .exe do DOS funcionou muito bem para mim.
Está muito bem documentado .
fonte