क्या cmd.exe के लिए उपयोगिता जैसी कोई सीड है? [बन्द है]


149

मैं विंडोज़ कमांड लाइन ( cmd.exe ) का उपयोग करके प्रोग्राम सामग्री को प्रोग्रामेटिक रूप से संपादित करना चाहता हूं । * Nix में इस कार्य के लिए sed है। क्या खिड़कियों में कोई उपयोगी मूल समकक्ष है?


1
"देशी" से क्या मतलब ??? Cmd.exe में काम करने के लिए, या जो भी स्थापना के बिना काम करने के लिए इंस्टॉल करने योग्य है? यदि पूर्व, देखें तो नीचे GnuWin32 परिशोधित होगा; यदि उत्तरार्द्ध, नहीं। खिड़कियों के लिए कोई पूर्व-स्थापित देशी सेड नहीं।
माइकल पॉलुकोनिस

6
देशी से मेरा मतलब था कि अतिरिक्त सामान स्थापित किए बिना सभी खिड़कियों पर चलने वाला समाधान।
जैकब cturc

1
Cmd.exe को पीछे छोड़ दें और इसके बजाय PowerShell का उपयोग करें।
Bill_Stewart


यदि आप किसी फ़ाइल से कुछ लाइनें हटाना चाहते हैं, तो FIND / का उपयोग करें?
जॉन हेनकेल

जवाबों:


117

आज शक्तियों ने मुझे बचा लिया।

के लिए grepहै:

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

या

select-string somefile.txt -pattern "expression"

और sedवहाँ के लिए है:

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

अधिक विस्तार के लिए ज़ैन नबोलसिस ब्लॉग प्रविष्टि देखें


12
इसके अलावा: यदि आप इसे सामान्य cmd से कॉल करना चाहते हैं, तो बस @powershell -Command "get-content ..."। एकमात्र चेतावनी यह है कि आपको उद्धरण चिह्नों से बचना होगा: ... -कमांड "प्राप्त-सामग्री ... \" अभिव्यक्ति \ ", ..."
टार्क

1
@ तार AFAIR, आप अपनी कमांड में सिंगल कोट्स का उपयोग कर सकते हैं और कमांड को उद्धृत करने के लिए डबल कोट्स का उपयोग कर सकते हैं

2
मैंने कुछ स्थानों पर उद्धरणों के बीच कुछ सामान को हटाने के लिए एक फ़ाइल पर आज यह कोशिश की, केवल यह पता लगाने के लिए कि आउटपुट लगभग एक फाइल थी जो मूल से लगभग दोगुनी थी। कारण यह प्रतीत होता है कि इस पद्धति ने "\" के बजाय "\ r \ n" का उपयोग करने के लिए फ़ाइल में नए सिरे से हैंडल किया था।
user132278

1
\ R \ n के कारण दोहरीकरण का अर्थ यह होगा कि आपकी फ़ाइल पूरी तरह से नई सूचियों से बनी थी। यहाँ असली कारण है: एन्कोडिंग
अमित नायडू

2
@ @-bri (Get-Content c: \ temp \ test.txt) .replace ('[[MYID]', 'MyValue') | सेट-कंटेंट c: \ temp \ test.txt
AFP_555

94

sed (और इसका ilk) यूनिक्स कमांड के कई पैकेजों में समाहित है।

यदि आप कुछ भी स्थापित नहीं करना चाहते हैं और आपका सिस्टम विंडोज सर्वर एक नहीं है, तो आप उसके लिए एक स्क्रिप्टिंग भाषा (VBScript जैसे) का उपयोग कर सकते हैं। नीचे एक सकल, ऑफ-द-कफ छुरा है। आपकी कमांड लाइन दिखेगी

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

जहाँ पुराने और newpat Microsoft vbscript regex पैटर्न हैं । जाहिर है कि मैंने केवल स्थानापन्न कमांड को लागू किया है और कुछ चीजों को ग्रहण किया है, लेकिन आप इसे समझदारी से समझ सकते हैं और 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

1
यह बिल्कुल वैसा नहीं है जैसा मैं चाहता हूं कि मैं यह मानता हूं कि वीबीएस पर निर्भरता सबसे हल्का समाधान है।
जैकब cturc

7
GnuWin32 है अगर देशी द्वारा आप "सामान्य" खिड़कियों पर्यावरण (cygwin के विपरीत) में चलाने के लिए डिज़ाइन मतलब, एक देशी समाधान। उन्हें एक कोशिश दें, और आप उन्हें उन सभी विंडोज़ सिस्टम पर रहने की उम्मीद करना शुरू करेंगे जो आप उपयोग करते हैं। !!!
माइकल पॉलुकोनिस

3
मेरे मामले के लिए काम करता है! इसके अलावा, भूल न करें "// NoLogo" सीएसस्क्रिप्ट विकल्प।
मार्को डुमिक

4
यदि यह "ऑफ-द-कफ" है, तो आश्चर्य करें कि आपका अन्य कोड कैसा दिखता है! कमाल है, धन्यवाद।
सबुनकु

2
एक समान रेगेक्स खोज और प्रतिस्थापित उपयोगिता को JScript के साथ किया जा सकता है। VBScript पर JScript का लाभ यह है कि इसे आसानी से एक स्क्रिप्ट में बैच के साथ जोड़ा जा सकता है, जिससे उपयोगिता को बैच या कमांड लाइन संदर्भ में उपयोग करना आसान हो जाता है। REPL.BAT नामक एक मजबूत हाइब्रिड JScript / बैच उपयोगिता उपलब्ध है । इसमें कई कमांड लाइन विकल्प हैं। पूर्ण प्रलेखन स्क्रिप्ट के भीतर एम्बेडेड है। इसमें निश्चित रूप से पूर्ण सेड की क्षमता नहीं है, लेकिन फिर भी, यह काफी शक्तिशाली है।
डेबनहम


17

यदि आप कुछ भी स्थापित नहीं करना चाहते हैं (मुझे लगता है कि आप स्क्रिप्ट को कुछ समाधान / कार्यक्रम / आदि में जोड़ना चाहते हैं जो अन्य मशीनों में चलाया जाएगा), तो आप एक 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

और आप इसे इस तरह चलाते हैं:

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

जो "बिल बुनकर" द्वारा प्रदान किए गए सेड संस्करण के समान है, लेकिन मुझे लगता है कि यह विशेष ('> </) वर्णों के संदर्भ में अधिक अनुकूल है।

Btw, मैंने यह नहीं लिखा, लेकिन मुझे याद नहीं है कि मुझे यह कहाँ से मिला है।


10

नहीं है सुपर Sed sed का एक उन्नत संस्करण। विंडोज के लिए यह एक स्टैंडअलोन .exe है, जिसका उद्देश्य कमांड लाइन से चलने के लिए है।


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

यह व्यवहार है

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

1
यह पूरी तरह से काम करता है। नोट: "गेट-कंटेंट" पर कोष्ठक सुनिश्चित करते हैं कि फ़ाइल बाद में उपयोग में नहीं आएगी जब "सेट-कंटेंट" कहा जाएगा।
काफू

cmd में कुछ ऐसा ही संभव है? समझने के लिए यह केवल pwsh के लिए है
फेरोओ

क्या 'SourceRegexp' को किसी भी संभावित रेगेक्स द्वारा प्रतिस्थापित किया जाना है? क्या यह वास्तव में पावर शेल में काम करता है?
scjorge

7

आप शक्तियां आजमा सकते हैं। इसमें आपके द्वारा उपयोग की जा सकने वाली सामग्री और सेट-सामग्री कमांडलेट बन सकते हैं।


4
वे शायद PowerShell में दो चीजें हैं जो कम से कम योगदान sedदेती हैं; ;-) -replaceऑपरेटर शायद एक बेहतर सुझाव है।
जॉय

7

Fart.exe का प्रयास करें। यह एक ढूँढें और बदलें-पाठ उपयोगिता है जिसे कमांड बैच कार्यक्रमों में उपयोग किया जा सकता है।

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


अगर मैं वास्तव में शेल की तरह एक * निक्स का उपयोग नहीं कर सकता हूं, तो मैं इसे पसंद करता हूं क्योंकि यह एक छोटा स्टैंडअलोन है जिसमें कोई निर्भरता नहीं है।
क्यूबेन


6

मैं Cygwin का उपयोग करता हूं । मैं बहुत से ऐसे लोगों में भाग लेता हूं जिन्हें इस बात का एहसास नहीं है कि अगर आप अपने पैथ पर साइग्विन बायनेरिज़ डालते हैं, तो आप उन्हें विंडोज कमांड शेल के भीतर से इस्तेमाल कर सकते हैं। आपको सिग्विन बैश नहीं चलाना है।

आप Microsoft से उपलब्ध यूनिक्स के लिए विंडोज सेवाओं में भी देख सकते हैं (लेकिन केवल व्यावसायिक और विंडोज के उपरोक्त संस्करणों पर)।


4

संपादित करें या संपादित करें

इसके अलावा यूनिक्स के लिए विंडोज सर्विसेज है जो विंडोज़ के लिए कई यूनिक्स टूल्स के साथ आती है। http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

अद्यतन 12/7/12 Windows 2003 R2, विंडोज 7 और सर्वर 2008, आदि में उपर्युक्त को UNIX- आधारित अनुप्रयोगों (SUA) के लिए ऐड-ऑन के रूप में प्रतिस्थापित किया गया है। लेकिन आपको उपयोगिताओं को डाउनलोड करना होगा: http://www.microsoft.com/en-us/download/details.aspx?id=2391


5
दोनों विंडोज के 64-बिट संस्करणों पर अब मौजूद नहीं हैं।
जॉय

3

आप GNU टूल्स को देख सकते हैं , वे विंडोज़ पर (अन्य चीजों के अलावा) sed प्रदान करते हैं।


3

विंडोज के लिए एक सहायक बैच फ़ाइल है जिसे repl.batSED लेकिन doesn't require any additional downloadया इंस्टॉलेशन की क्षमता से बहुत अधिक कहा जाता है । यह एक हाइब्रिड बैच फ़ाइल है जो Jscriptसुविधाओं को लागू करने के लिए उपयोग करती है और इसलिए swift, doesn't suffer from the usual poison charactersबैच प्रसंस्करण और आसानी से रिक्त लाइनों को संभालती है।

से डाउनलोड करें repl- https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

लेखक स्टैक ओवरफ्लो और dostips.com से @dbenham है

एक अन्य सहायक बैच फ़ाइल जिसे findrepl.batWindows उपयोगकर्ता को अधिक की क्षमता प्रदान करता है GREPऔर यह भी Jscriptएक हाइब्रिड बैच फ़ाइल पर आधारित है और है। यह repl.bat के लाभों को साझा करता है

से डाउनलोड करें findrepl- https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

लेखक स्टैक ओवरफ्लो और dostips.com से @aacini है


उत्तर के लिए ड्रॉपबॉक्स लिंक नीचे है। क्या आपके पास एक द्वितीयक लिंक है?
विशाल आनंद

2

जहाँ तक मुझे पता है कि सेड जैसा कुछ भी खिड़कियों के साथ नहीं है। हालाँकि, सिगविन के हिस्से के रूप में विंडोज के लिए कई अलग-अलग रूपों में सेड उपलब्ध है, यदि आप एक पूर्ण POSIX सबसिस्टम चाहते हैं, या एक Win32 देशी निष्पादन योग्य के रूप में यदि आप कमांड लाइन पर सिर्फ sed चलाना चाहते हैं।

विंडोज के लिए सिड (GnuWin32 प्रोजेक्ट)

यदि इसे विंडोज के मूल निवासी होने की आवश्यकता है तो केवल एक चीज जो मैं सुझा सकता हूं वह है बिना स्क्रिप्ट जैसे कि वीबीएसस्क्रिप्ट जैसे विंडोज द्वारा समर्थित एक स्क्रिप्टिंग भाषा का उपयोग करना।


1

सिगविन काम करता है, लेकिन ये उपयोगिताओं भी उपलब्ध हैं। बस उन्हें अपने ड्राइव पर प्लॉप करें, डायरेक्टरी को अपने रास्ते में लाएं, और आपके पास अपने कई यूनिक्स यूटिलिटीज हैं। लाइटरवेट IMHO कि साइगविन (हालांकि यह भी काम करता है)।


0

मुझे एक सेड टूल की जरूरत थी जो विंडोज cmd.exe प्रॉम्प्ट के लिए काम करता हो। एरिक Pement के बंदरगाह sed एक भी डॉस .exe को मेरे लिए महान काम किया।

यह बहुत अच्छी तरह से प्रलेखित है


1
सवाल विंडोज के बारे में है (cmd.exe) DOS के बारे में नहीं
a_horse_with_no_name

@royhowie: मैं देख रहा हूँ। हालाँकि इनमें से कुछ उत्तर किसी के लिए उपयोगी हो सकते हैं, लेकिन मैं मानता हूँ कि प्रश्न वास्तव में SO के लिए उपयुक्त नहीं है। OTOH, मैं थोक विलोपन की सिफारिश करने के लिए योग्य नहीं लगता।
PM 2Ring

इस स्थिति में मुझे लगता है कि उत्तर के आवश्यक भागों को शामिल करना मुश्किल होगा, क्योंकि आवश्यक भाग एक .exe फ़ाइल है जो लिंक किए गए पृष्ठ पर होस्ट की गई है। मैं लिंक-रोट के बारे में चिंता को पूरी तरह से समझता हूं, मैं अभी अनिश्चित हूं कि मैं इस स्व-निहित को एसओ कैसे बना सकता हूं।
ब्रायन केनेडी

पकड़ने के लिए धन्यवाद, a_horse_with_no_name। मैं अपनी भाषा के साथ मैला हो रहा था। आपने जो समस्या बताई उसे ठीक करने के लिए मैंने अपनी टिप्पणी संपादित की।
ब्रायन केनेडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.