मैं विंडोज़ कमांड लाइन ( cmd.exe ) का उपयोग करके प्रोग्राम सामग्री को प्रोग्रामेटिक रूप से संपादित करना चाहता हूं । * Nix में इस कार्य के लिए sed है। क्या खिड़कियों में कोई उपयोगी मूल समकक्ष है?
मैं विंडोज़ कमांड लाइन ( cmd.exe ) का उपयोग करके प्रोग्राम सामग्री को प्रोग्रामेटिक रूप से संपादित करना चाहता हूं । * Nix में इस कार्य के लिए sed है। क्या खिड़कियों में कोई उपयोगी मूल समकक्ष है?
जवाबों:
आज शक्तियों ने मुझे बचा लिया।
के लिए grepहै:
get-content somefile.txt | where { $_ -match "expression"}
या
select-string somefile.txt -pattern "expression"
और sedवहाँ के लिए है:
get-content somefile.txt | %{$_ -replace "expression","replace"}
अधिक विस्तार के लिए ज़ैन नबोलसिस ब्लॉग प्रविष्टि देखें ।
sed (और इसका ilk) यूनिक्स कमांड के कई पैकेजों में समाहित है।
sed, grepआदि।-zविकल्प का समर्थन करते हैंयदि आप कुछ भी स्थापित नहीं करना चाहते हैं और आपका सिस्टम विंडोज सर्वर एक नहीं है, तो आप उसके लिए एक स्क्रिप्टिंग भाषा (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
यदि आप कुछ भी स्थापित नहीं करना चाहते हैं (मुझे लगता है कि आप स्क्रिप्ट को कुछ समाधान / कार्यक्रम / आदि में जोड़ना चाहते हैं जो अन्य मशीनों में चलाया जाएगा), तो आप एक 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, मैंने यह नहीं लिखा, लेकिन मुझे याद नहीं है कि मुझे यह कहाँ से मिला है।
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
यह व्यवहार है
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
आप शक्तियां आजमा सकते हैं। इसमें आपके द्वारा उपयोग की जा सकने वाली सामग्री और सेट-सामग्री कमांडलेट बन सकते हैं।
sedदेती हैं; ;-) -replaceऑपरेटर शायद एक बेहतर सुझाव है।
Fart.exe का प्रयास करें। यह एक ढूँढें और बदलें-पाठ उपयोगिता है जिसे कमांड बैच कार्यक्रमों में उपयोग किया जा सकता है।
आप Cygwin ( http://www.cygwin.com/ ) स्थापित कर सकते हैं और वहां से sed का उपयोग कर सकते हैं।
मैं Cygwin का उपयोग करता हूं । मैं बहुत से ऐसे लोगों में भाग लेता हूं जिन्हें इस बात का एहसास नहीं है कि अगर आप अपने पैथ पर साइग्विन बायनेरिज़ डालते हैं, तो आप उन्हें विंडोज कमांड शेल के भीतर से इस्तेमाल कर सकते हैं। आपको सिग्विन बैश नहीं चलाना है।
आप Microsoft से उपलब्ध यूनिक्स के लिए विंडोज सेवाओं में भी देख सकते हैं (लेकिन केवल व्यावसायिक और विंडोज के उपरोक्त संस्करणों पर)।
संपादित करें या संपादित करें
इसके अलावा यूनिक्स के लिए विंडोज सर्विसेज है जो विंडोज़ के लिए कई यूनिक्स टूल्स के साथ आती है। 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
विंडोज के लिए एक सहायक बैच फ़ाइल है जिसे 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 है
जहाँ तक मुझे पता है कि सेड जैसा कुछ भी खिड़कियों के साथ नहीं है। हालाँकि, सिगविन के हिस्से के रूप में विंडोज के लिए कई अलग-अलग रूपों में सेड उपलब्ध है, यदि आप एक पूर्ण POSIX सबसिस्टम चाहते हैं, या एक Win32 देशी निष्पादन योग्य के रूप में यदि आप कमांड लाइन पर सिर्फ sed चलाना चाहते हैं।
विंडोज के लिए सिड (GnuWin32 प्रोजेक्ट)
यदि इसे विंडोज के मूल निवासी होने की आवश्यकता है तो केवल एक चीज जो मैं सुझा सकता हूं वह है बिना स्क्रिप्ट जैसे कि वीबीएसस्क्रिप्ट जैसे विंडोज द्वारा समर्थित एक स्क्रिप्टिंग भाषा का उपयोग करना।
मुझे एक सेड टूल की जरूरत थी जो विंडोज cmd.exe प्रॉम्प्ट के लिए काम करता हो। एरिक Pement के बंदरगाह sed एक भी डॉस .exe को मेरे लिए महान काम किया।
यह बहुत अच्छी तरह से प्रलेखित है ।