Czy istnieje narzędzie podobne do seda dla cmd.exe? [Zamknięte]
149
Chcę programowo edytować zawartość pliku za pomocą wiersza poleceń systemu Windows ( cmd.exe ). W * nix jest sed do tego zadania. Czy jest jakiś przydatny natywny odpowiednik w systemie Windows?
Co masz na myśli mówiąc „rodzimy” ??? Możliwość instalacji do pracy w cmd.exe lub do pracy bez jakiejkolwiek instalacji? Jeśli pierwszy, zobacz GnuWin32 poniżej; jeśli to drugie, nie. Brak preinstalowanego natywnego seda dla systemu Windows.
Michael Paulukonis
6
Przez natywny rozumiałem rozwiązanie, które działa na wszystkich oknach bez instalowania dodatkowych rzeczy.
Jakub Šturc
1
Pozostaw program cmd.exe i zamiast tego użyj programu PowerShell.
Dodatkowo: jeśli chcesz wywołać to z normalnego cmd, po prostu @powershell -Command "get-content ..." it. Jedynym zastrzeżeniem jest konieczność zmiany znaczenia w cudzysłowie: ... -Command "get-content ... \" expression \ ", ..."
Tarc,
1
@Tarc AFAIR, możesz użyć pojedynczych cudzysłowów w swoim poleceniu i zamiast tego użyć podwójnych cudzysłowów, aby zacytować polecenie
2
Próbowałem tego dzisiaj na pliku, aby usunąć niektóre rzeczy między cudzysłowami w niektórych miejscach, tylko po to, aby odkryć, że wynik był plikiem prawie dwa razy większym niż oryginał. Przyczyną wydaje się być to, że ta metoda zmieniła sposób obsługi nowych linii w pliku, aby używać „\ r \ n” zamiast „\ n”.
user132278
1
Podwojenie z powodu \ r \ n oznaczałoby, że plik składał się wyłącznie z nowych linii. Oto prawdziwy powód: kodowanie .
Podsystem Windows dla systemu Linux jest najbardziej „natywną” opcją, ale nie jest domyślnie instalowany w systemie Windows; ma sed, grepitp. po wyjęciu z pudełka.
Jeśli nie chcesz instalować niczego a system nie jest Windows Server jeden, to mógłby użyć języka skryptowego (VBScript EG) do tego. Poniżej znajduje się obrzydliwe dźgnięcie z mankietu. Twoja linia poleceń będzie wyglądać
gdzie oldpat i newpat to wzorce regex Microsoft vbscript . Oczywiście zaimplementowałem tylko polecenie zastępowania i założyłem kilka rzeczy, ale możesz to rozwinąć, aby być mądrzejszym i lepiej zrozumieć sedwiersz poleceń.
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
Nie jest to dokładnie to, czego chcę, ale wierzę, że zależność od VBS jest najlżejszym rozwiązaniem.
Jakub Šturc
7
GnuWin32 jest rozwiązaniem natywnym, jeśli przez natywne rozumiesz zaprojektowane do działania w „normalnym” środowisku Windows (w przeciwieństwie do CygWin). Spróbuj, a zaczniesz oczekiwać, że będą działać w KAŻDYM systemie Windows, którego używasz. !!!
Michael Paulukonis
3
Działa w moim przypadku! Nie zapomnij także o opcji cscript „// NoLogo”.
Marko Dumic
4
Jeśli to jest „z mankietu”, zastanawiaj się, jak wygląda twój drugi kod! Niesamowite, dzięki.
Sabuncu
2
Podobne narzędzie do wyszukiwania i zamiany wyrażeń regularnych można wykonać za pomocą języka JScript. Zaletą języka JScript w porównaniu z VBScript jest to, że można go łatwo połączyć z wsadowym w jednym skrypcie, dzięki czemu narzędzie jest łatwiejsze w użyciu w kontekście wsadowym lub wiersza poleceń. Dostępne jest solidne, hybrydowe narzędzie JScript / wsadowe o nazwie REPL.BAT . Posiada wiele opcji wiersza poleceń. Pełna dokumentacja jest osadzona w skrypcie. Z pewnością nie ma pełnej zdolności seda, ale mimo to jest dość potężny.
Jeśli nie chcesz niczego instalować (zakładam, że chcesz dodać skrypt do jakiegoś rozwiązania / programu / itp., Które będzie uruchamiane na innych komputerach), możesz spróbować utworzyć skrypt vbs (powiedzmy, zamień.vbs):
To są prawdopodobnie dwie rzeczy w PowerShell, które w najmniejszym stopniu przyczyniają się do tego, co sedrobi ;-). -replaceOperator jest prawdopodobnie lepsza propozycja.
Joey
7
Spróbuj fart.exe. Jest to narzędzie do znajdowania i zastępowania tekstu, którego można używać w programach wsadowych poleceń.
Używam Cygwin . Spotykam wiele osób, które nie zdają sobie sprawy, że jeśli umieścisz pliki binarne Cygwin na swojej ścieżce PATH, możesz ich używać z poziomu powłoki poleceń systemu Windows. Nie musisz uruchamiać Cygwin's Bash.
Możesz również zajrzeć do usług systemu Windows dla systemu Unix dostępnych od firmy Microsoft (ale tylko w wersji Professional i nowszych wersjach systemu Windows).
Aktualizacja 12/7/12 W systemie Windows 2003 R2, Windows 7 i Server 2008 itd. Powyższe rozwiązanie zostało zastąpione przez podsystem aplikacji opartych na systemie UNIX (SUA) jako dodatek. Ale musisz pobrać narzędzia:
http://www.microsoft.com/en-us/download/details.aspx?id=2391
Istnieje pomocniczy plik wsadowy dla systemu Windows o nazwie, repl.batktóry ma wiele możliwości SED, ale doesn't require any additional downloadlub instalacji. Jest to hybrydowy plik wsadowy, który wykorzystuje Jscriptdo implementacji funkcji i tak jest swift, a także doesn't suffer from the usual poison charactersprzetwarzania wsadowego i obsługuje z łatwością puste wiersze.
Autorem jest @dbenham z stack overflow i dostips.com
Inny plik wsadowy pomocnika, o nazwie, findrepl.batdaje użytkownikowi systemu Windows wiele możliwości GREPi jest również oparty naJscript pliku wsadowym hybrydowym. Ma zalety repl.bat
Łącze do skrzynki referencyjnej repl nie działa. Czy masz dodatkowe łącze?
Vishal Anand
2
O ile wiem, nic takiego jak sed nie jest dostarczane z oknami. Jednak sed jest dostępny dla systemu Windows w kilku różnych formach, w tym jako część Cygwin, jeśli chcesz mieć pełny podsystem POSIX, lub jako natywny plik wykonywalny Win32, jeśli chcesz uruchomić seda w wierszu poleceń.
Jeśli ma być natywny dla systemu Windows, jedyną inną rzeczą, którą mogę zasugerować, byłoby użycie języka skryptowego obsługiwanego przez system Windows bez dodatków, takich jak VBScript.
Cygwin działa, ale te narzędzia są również dostępne. Po prostu umieść je na dysku, umieść katalog w swojej ścieżce i masz wiele przyjaznych narzędzi uniksowych. Lżejszy IMHO, że Cygwin (chociaż to działa równie dobrze).
Pytanie dotyczy systemu Windows (cmd.exe), a nie DOS-a
a_horse_with_no_name
@royhowie: Rozumiem. Chociaż niektóre z tych odpowiedzi mogą być dla kogoś przydatne, zgadzam się, że samo pytanie nie jest odpowiednie dla SO. OTOH, nie czuję się kwalifikowany do rekomendowania usuwania hurtowego.
2:00 po południu
W tej sytuacji myślę, że byłoby trudno zawrzeć zasadnicze części odpowiedzi, ponieważ podstawową częścią jest plik .exe, który jest hostowany na połączonej stronie. Całkowicie rozumiem troskę o gnicie linków, po prostu nie jestem pewien, jak mogę to zrobić samodzielnie w SO.
bryan kennedy
Dzięki za połów, a_horse_with_no_name. Byłem niechlujny z moim językiem. Zmodyfikowałem swój komentarz, aby naprawić wskazany przez Ciebie problem.
Odpowiedzi:
Dzisiaj PowerShell mnie uratował.
Bo
grep
jest:lub
a ponieważ
sed
jest:Więcej szczegółów można znaleźć we wpisie na blogu Zain Naboulsis .
źródło
sed
(i im podobne) są zawarte w kilku pakietach poleceń systemu Unix.sed
,grep
itp. po wyjęciu z pudełka.-z
opcję w przeciwieństwie do wymienionych górnych portówJeśli nie chcesz instalować niczego a system nie jest Windows Server jeden, to mógłby użyć języka skryptowego (VBScript EG) do tego. Poniżej znajduje się obrzydliwe dźgnięcie z mankietu. Twoja linia poleceń będzie wyglądać
gdzie oldpat i newpat to wzorce regex Microsoft vbscript . Oczywiście zaimplementowałem tylko polecenie zastępowania i założyłem kilka rzeczy, ale możesz to rozwinąć, aby być mądrzejszym i lepiej zrozumieć
sed
wiersz poleceń.źródło
UnxUtils dostarcza sed dla Win32, podobnie jak GNUWin32 .
źródło
Jeśli nie chcesz niczego instalować (zakładam, że chcesz dodać skrypt do jakiegoś rozwiązania / programu / itp., Które będzie uruchamiane na innych komputerach), możesz spróbować utworzyć skrypt vbs (powiedzmy, zamień.vbs):
I uruchamiasz to w ten sposób:
Która jest podobna do wersji sed dostarczonej przez "bill weaver", ale myślę, że ta jest bardziej przyjazna pod względem znaków specjalnych ('> </).
Przy okazji, nie napisałem tego, ale nie pamiętam, skąd to wziąłem.
źródło
Istnieje Super Sed , ulepszona wersja seda. W przypadku systemu Windows jest to samodzielny plik .exe, przeznaczony do uruchamiania z wiersza poleceń.
źródło
To jest zachowanie
źródło
Możesz spróbować PowerShell. Istnieją wbudowane polecenia get-content i set-content , których można użyć.
źródło
sed
robi ;-).-replace
Operator jest prawdopodobnie lepsza propozycja.Spróbuj fart.exe. Jest to narzędzie do znajdowania i zastępowania tekstu, którego można używać w programach wsadowych poleceń.
http://sourceforge.net/projects/fart-it/
źródło
Możesz zainstalować Cygwin ( http://www.cygwin.com/ ) i stamtąd używać seda.
źródło
Używam Cygwin . Spotykam wiele osób, które nie zdają sobie sprawy, że jeśli umieścisz pliki binarne Cygwin na swojej ścieżce PATH, możesz ich używać z poziomu powłoki poleceń systemu Windows. Nie musisz uruchamiać Cygwin's Bash.
Możesz również zajrzeć do usług systemu Windows dla systemu Unix dostępnych od firmy Microsoft (ale tylko w wersji Professional i nowszych wersjach systemu Windows).
źródło
edlin lub edit
dodatkowo jest Windows Services for Unix, który zawiera wiele narzędzi unixowych dla Windows. http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
Aktualizacja 12/7/12 W systemie Windows 2003 R2, Windows 7 i Server 2008 itd. Powyższe rozwiązanie zostało zastąpione przez podsystem aplikacji opartych na systemie UNIX (SUA) jako dodatek. Ale musisz pobrać narzędzia: http://www.microsoft.com/en-us/download/details.aspx?id=2391
źródło
Możesz spojrzeć na Narzędzia GNU , które zapewniają (między innymi) sed w systemie Windows.
źródło
Istnieje pomocniczy plik wsadowy dla systemu Windows o nazwie,
repl.bat
który ma wiele możliwości SED, aledoesn't require any additional download
lub instalacji. Jest to hybrydowy plik wsadowy, który wykorzystujeJscript
do implementacji funkcji i tak jestswift
, a takżedoesn't suffer from the usual poison characters
przetwarzania wsadowego i obsługuje z łatwością puste wiersze.Pobierz
repl
z - https://www.dropbox.com/s/qidqwztmetbvklt/repl.batAutorem jest @dbenham z stack overflow i dostips.com
Inny plik wsadowy pomocnika, o nazwie,
findrepl.bat
daje użytkownikowi systemu Windows wiele możliwościGREP
i jest również oparty naJscript
pliku wsadowym hybrydowym. Ma zalety repl.batPobierz
findrepl
z - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.batAutorem jest @aacini z stack overflow i dostips.com
źródło
O ile wiem, nic takiego jak sed nie jest dostarczane z oknami. Jednak sed jest dostępny dla systemu Windows w kilku różnych formach, w tym jako część Cygwin, jeśli chcesz mieć pełny podsystem POSIX, lub jako natywny plik wykonywalny Win32, jeśli chcesz uruchomić seda w wierszu poleceń.
Sed dla Windows (projekt GnuWin32)
Jeśli ma być natywny dla systemu Windows, jedyną inną rzeczą, którą mogę zasugerować, byłoby użycie języka skryptowego obsługiwanego przez system Windows bez dodatków, takich jak VBScript.
źródło
Cygwin działa, ale te narzędzia są również dostępne. Po prostu umieść je na dysku, umieść katalog w swojej ścieżce i masz wiele przyjaznych narzędzi uniksowych. Lżejszy IMHO, że Cygwin (chociaż to działa równie dobrze).
źródło
Potrzebowałem narzędzia sed, które działałoby z monitem Windows cmd.exe. Port Eric Pementa od sed do jednego exe DOS pracował wielki dla mnie.
Jest to całkiem dobrze udokumentowane .
źródło