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 grep
is er:
get-content somefile.txt | where { $_ -match "expression"}
of
select-string somefile.txt -pattern "expression"
en voor sed
is 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.
- Cygwinwerkt maar is gigantisch.
- UnxUtilsis veel slanker.
- GnuWin32is een andere poort die werkt.
- Een ander alternatief is het UWIN-systeemvan AT&T Research.
- MSYSvan MinGw is nog een andere optie.
- Windows-subsysteem voor Linuxis de meest “native” optie, maar is niet geïnstalleerd op Windows standaard; het heeft echter uit de doos
sed
,grep
enz. - https://github.com/mbuilov/sed-windowsbiedt recente 4.3 en 4.4 versies, die
-z
ondersteunen optiein tegenstelling tot de vermelde bovenste poorten
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.bat
die veel van het vermogen van SED heeft, maar doesn't require any additional download
of installatie. Het is een hybride batchbestand dat Jscript
gebruikt om de functies te implementeren en ook swift
, en doesn't suffer from the usual poison characters
van batchverwerking en behandelt lege lijnen met gemak.
Download repl
VAN – 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.bat
geeft de Windows-gebruiker veel van de capability van GREP
en is ook gebaseerd op Jscript
EN IS Evenzo een hybride batchbestand. Het deelt de voordelen van REP.BAT
Download findrepl
van – 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.