Is er een sed-achtig hulpprogramma voor cmd.exe?

Ik wil de inhoud van bestanden programmatisch bewerken met de Windows-opdrachtregel (cmd.exe). In *nix is ​​er sedvoor deze taken. Is er een nuttig native equivalent in Windows?


Antwoord 1, autoriteit 100%

Vandaag heeft powershell me gered.

Voor grepis er:

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

of

select-string somefile.txt -pattern "expression"

en voor sedis er:

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

Voor meer informatie over het vervangen van de PowerShell-functie, zie dit Microsoft-artikel.


Antwoord 2, autoriteit 71%

sed(en zijn soortgenoten) bevinden zich in verschillende pakketten met Unix-commando’s.

Als u niets wilt installeren en uw systeem is geen Windows Server-systeem, dan zouu daarvoor een scripttaal (bijv. VBScript) kunnen gebruiken. Hieronder is een grove, off-the-cuff steek naar het. Uw opdrachtregel zou er als volgt uitzien:

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

waar oldpat en newpat Microsoft vbscript regex-patronen zijn. Het is duidelijk dat ik alleen het vervangende commando heb geïmplementeerd en een aantal dingen heb aangenomen, maar je zou het kunnen uitwerken om slimmer te zijn en meer te begrijpen van de sed-opdrachtregel.

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

Antwoord 3, autoriteit 16%

UnxUtilsbiedt sed voor Win32, net als GNUWin32.


Antwoord 4, autoriteit 12%

Als je niets wilt installeren (ik neem aan dat je het script wilt toevoegen aan een oplossing/programma/etc die op andere machines wordt uitgevoerd), kun je proberen een vbs-script te maken (laten we zeggen, vervang. 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

en je voert het als volgt uit:

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

die vergelijkbaar is met de sed-versie die wordt geleverd door “Bill Weaver”, maar ik denk dat deze vriendelijker is in termen van speciale (‘& GT; & LT; /) -karakters.

BTW, ik heb dit niet geschreven, maar ik kan me niet herinneren waar ik het vandaan heb.


Antwoord 5, Autoriteit 8%

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

Dit is het gedrag van

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

Antwoord 6, Autoriteit 7%

Er is super sed een verbeterde versie van SED. Voor Windows is dit een stand-alone .exe, bestemd voor het uitvoeren van de opdrachtregel.


Antwoord 7, Autoriteit 5%

Je zou Powershell kunnen proberen. Er zijn get-inhoud en Set-inhoud commando’s bouwen in die u zou kunnen gebruiken.


Antwoord 8, Autoriteit 5%

Ik gebruik cygwin . Ik loop veel mensen tegen die zich niet realiseren dat als je de Cygwin-binaries op je pad zet, je ze kunt gebruiken vanuit de Shell Shell van Windows. Je hoeft de bash van Cygwin niet uit te voeren.

U kunt ook onderzoeken Windows Services voor Unix verkrijgbaar bij Microsoft (maar alleen op de professionele en bovenstaande versies van Windows).


Antwoord 9, Autoriteit 5%

Probeer Fart.exe. Het is een zoeken-en-vervanging-teksthulpprogramma dat kan worden gebruikt in commando-batchprogramma’s.

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


Antwoord 10, Autoriteit 4%

U kunt Cygwin (http://www.cygwin.com/ ) en gebruikt .


Antwoord 11, Autoriteit 3%

EDLIN of EDIT

Plus Er zijn Windows-services voor UNIX die wordt geleverd met veel Unix-tools voor Windows.
http://technet.microsoft.com/en-us/interopmigratie/bb380242. aspx

Update 12/7/12
In Windows 2003 R2, Windows 7 & AMP; Server 2008, enz. Het bovenstaande wordt vervangen door het subsysteem voor Unix-gebaseerde applicaties (sua) als een add-on. Maar je moet de hulpprogramma’s downloaden:
http://www.microsoft.com/en-us/ Download / Details.aspx? ID = 2391


Antwoord 12, Autoriteit 2%

Je zou kunnen kijken naar gnu tools , ze bieden (onder andere) SED op Windows.


Antwoord 13, Autoriteit 2%

Er is een helperbatchbestand voor Windows genaamd repl.batdie veel van het vermogen van SED heeft, maar doesn't require any additional downloadof installatie. Het is een hybride batchbestand dat Jscriptgebruikt om de functies te implementeren en ook swift, en doesn't suffer from the usual poison charactersvan batchverwerking en behandelt lege lijnen met gemak.

Download replVAN – https: // www. dropbox.com/s/qidqwztmetbvklt/repl.bat

Alternatieve link – https: //www.dostips. com / forum / viewtopic.php? f = 3 & amp; t = 6044

De auteur is @dbenham van Stack Overflow en Dostips.com

Nog een helper-batchbestand genaamd findrepl.batgeeft de Windows-gebruiker veel van de capability van GREPen is ook gebaseerd op JscriptEN IS Evenzo een hybride batchbestand. Het deelt de voordelen van REP.BAT

Download findreplvan – https://www. dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

De auteur is @aacini van stack overflow en dostips.com


Antwoord 14

Voor zover ik weet is er niets zoals sed gebundeld met vensters. sed is echter beschikbaar voor Windows in verschillende vormen, waaronder als onderdeel van Cygwin, als je een volledig POSIX-subsysteem wilt, of als een native Win32-uitvoerbaar bestand als je sed gewoon op de opdrachtregel wilt uitvoeren.

Sed voor Windows (GnuWin32-project)

Als het native moet zijn voor Windows, dan is het enige andere dat ik kan voorstellen, het gebruik van een scripttaal die door Windows wordt ondersteund zonder add-ons, zoals VBScript.


Antwoord 15

Cygwin werkt, maar dezehulpprogramma’s zijn ook beschikbaar. Plof ze gewoon op je schijf, plaats de map in je pad en je hebt veel van je vriendelijke Unix-hulpprogramma’s. Lichter IMHO die Cygwin (hoewel dat net zo goed werkt).


Antwoord 16

Ik had een sed-tool nodig die werkte voor de Windows cmd.exe-prompt. Eric Pement’s port van sednaar een enkele DOS .exewerkte prima voor mij .

Het is redelijk goed gedocumenteerd.

Other episodes