Regex कमांड लाइन से प्रतिस्थापित करें


21

क्या कमांड लाइन से रीगेक्स को बदलना संभव है? अभी मैं ऐसा करने के लिए नोटपैड ++ का उपयोग कर रहा हूं। कमांड लाइन में मैं केवल FINDSTR का उपयोग कर सकता हूं जो केवल मच की गई फ़ाइलों / लाइनों का पता लगा सकता है

EDIT:
शायद यह VB स्क्रिप्ट बनाने और इसे cmd से चलाने के लिए संभव होगा? मैंने सामग्री के साथ बस एक फ़ाइल "hi.vbs" बनाई

Msgbox "Hi Buddy"

फिर cmd मुझे कमांड लाइन से "hi" टाइप करके इसे सीधे चलाने की अनुमति देता है।
तो अगर यह बैच स्क्रिप्ट के साथ संभव नहीं है, तो मैं एक VB स्क्रिप्ट गर्त बैच का उपयोग कर सकता हूं। या ..?


अंत में आप एक अनिर्णायक वाक्य लगाते हैं और पूरा EDIT भाग समस्या की ओर इशारा नहीं करता है, यह अधिक है जैसे "मैं vb में एक हैलो वर्ल्ड बनाता हूं, क्या मैं बैच में ऐसा कुछ बना सकता हूं? @IanPugsley द्वारा पोस्ट किए गए उत्तर की जांच करें? रेगेक्स-रिप्लेस करने का आसान तरीका।
mjsr

@ अजीज: इनमें से किसी भी जवाब ने आपके लिए काम किया है? यदि हां, तो क्या आप इसे स्वीकार करेंगे? यह इस समुदाय में भाग लेने का हिस्सा है; जिस तरह से हम मदद के लिए एक दूसरे को धन्यवाद देते हैं। स्वीकृत उत्तर के लिए दिए गए प्रतिष्ठा बिंदु अन्य उपयोगकर्ताओं को एक दूसरे के अनुभव का आकलन करने में मदद करते हैं। धन्यवाद।
JRobert

मैं कमांड लाइन से MYVBREPLACE (.vbs) FILENAME REGEXPATTERN REPLACEMENT की तरह कॉलिंग के बारे में सोच रहा था।
अज़ीज़

जवाबों:


11

यहां
जाएं http://gnuwin32.sourceforge.net/packages.html
SED पर नीचे जाएं। जब आप इस पर हों तो कोरुटिल डाउनलोड करें।

यह कमांड विश्व स्तर पर और प्रत्येक लाइन पर b के साथ बदल देगा। इसलिए लाइन पर पहली घटना नहीं है।

उदा। sed "s / a / b / g" a.txt का उपयोग करना

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScript नियमित अभिव्यक्ति का समर्थन करता है, आप इसे ढूंढ सकते हैं और बदल सकते हैं।

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

Bxxx dxxx xxx प्रदर्शित करता है


अद्भुत पागल उपकरण !!! इस उपकरण को भी विज्ञापन दिया गया था। मैं अभी तक इसका उपयोग करने का प्रबंधन नहीं कर सका, लेकिन जब मैंने gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command पढ़ा, तो मैं देख सकता हूं कि यह मेरी अपेक्षा से बहुत अधिक कर सकता है। बहुत बहुत धन्यवाद
अजीज

बैश के नए संस्करण भी नियमित अभिव्यक्ति कर सकते हैं, कभी-कभी यह सरल कार्यों के लिए पर्याप्त होता है और यहां तक ​​कि sed का उपयोग करने की कोई आवश्यकता नहीं होती है।
vtest

और अगर किसी को पता नहीं है, तो vtest ने क्या कहा। सागवान ने बैश किया।
बार्लॉप

हालांकि, मल्टी-लाइन
रिप्ले के

1
@KennyEvitt cmd खोल यह प्रदर्शित करने और यूनिकोड UTF8 chcp 65001 के लिए chcp का उपयोग करने के (के रूप में आप कहते हैं, UTF16 encoding.chcp 1200 और chcp 12001 समर्थित नहीं है) प्राप्त करने के लिए एक ट्वीक की आवश्यकता है stackoverflow.com/questions/9321419/... सुनिश्चित नहीं हैं कि फिर से mintty। पुन: शक्तियां सुनिश्चित नहीं हैं। लेकिन utf-8 को cmd या पावरशेल में ठीक समर्थन दिया गया है। एक लंबे समय के रूप में एक सहायक फ़ॉन्ट कूरियर नए की तरह प्रयोग किया जाता है, और जब तक यह कोडपेज 65001 है। utf16 एन्कोडिंग के लिए एक cmd / u है।
बार्लोप

26

मैंने ऐसा करने के लिए विंडोज के लिए एक फ्री कमांड लाइन टूल लिखा है। इसे rxrepl कहा जाता है , यह यूनिकोड और फ़ाइल खोज का समर्थन करता है। कुछ को यह एक उपयोगी उपकरण लग सकता है।

rxrepl पर्ल संगत संगत एक्सप्रेशन (PCRE) का उपयोग करके टेक्स्ट फ़ाइलों में टेक्स्ट को खोजने और बदलने के लिए एक Microsoft विंडोज कमांड लाइन टूल है।

इसकी निम्नलिखित विशेषताएं हैं:

  • पर्ल कम्पेटिबल रेगुलर एक्सप्रेशंस का उपयोग करके खोजें
  • प्रतिस्थापन पाठ में समूह मिलान का उपयोग करें
  • विंडोज और यूनिक्स लाइन का समर्थन करता है
  • यूनिकोड समर्थन
  • कई खोज / तर्कों को प्रतिस्थापित करना स्वीकार करता है
  • विकल्प फ़ाइल में विकल्प दिए जा सकते हैं
  • फ़ाइलों के लिए स्कैन करें
  • पूर्वावलोकन मोड
  • लाइन और पूर्ण फ़ाइल मिलान मोड

यहाँ छवि विवरण दर्ज करें


4
ये अद्भुत है! तुम मुझे और जरूरत उदाहरण की तरह कर रहे हैं, प्रतिस्थापित कर देता है "फू फाइटर्स" एक फ़ाइल में साथ "foobar": rxrepl.exe -f file.txt -एक -s "(foo) बार" -r "\ 1fighters"
Dunc

1
इसके अलावा, क्या आप गितुब जैसी चीज पर स्रोत का उपयोग करेंगे? पूरी तरह से समझ में आता है कि अगर इसका मतलब खुला स्रोत नहीं है, लेकिन मैं बहुत उत्सुक हूं।
kayleeFrye_onDeck

1
@ सच है? मैं 64-बिट विंडो चला रहा हूं और लगता है कि इससे कोई समस्या नहीं हैC:\WINDOWS\System32\cmd.exe
kayleeFrye_onDeck

1
बहुत बढ़िया उपकरण! Windows Server Std 2012 R2 x64 के तहत समस्याओं के बिना चल रहा है। धन्यवाद!
kwrl

2
महान उपकरण, मुझे आशा है कि आप अभी भी इसे बनाए रख रहे हैं
पानी

12

स्क्रिप्टिंग गाइ ने कवर किया कि यह पॉवरशेल में कैसे किया जाता है (सबसे हाल के विंडोज ओएस पर कोई अतिरिक्त डाउनलोड नहीं है, आप शायद पहले से ही इसे स्थापित कर चुके हैं)।

इसे शुरू करें, निम्नलिखित को चलाएं (एक के *साथ बदलने के लिए @):

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

यह .NET रेग्युलर एक्सप्रेशंस को सपोर्ट करता है , जिसमें पॉजिटिव और नेगेटिव लुक-फॉरवर्ड शामिल है, और नोटपैड ++ के सभी तरह के वर्जन 6.x से पहले रीजेक्स के साथ सपोर्ट नहीं करते थे (जितना मुझे notepad ++ से प्यार है)।


1
नोटपैड ++ संस्करण 6. के रूप में पूर्ण पीसीआरई का समर्थन करता है
बॉब

5

मैंने उसके लिए fnr.exe पाया है। इसमें GUI और कमांड-लाइन है।

एकाधिक फ़ाइलों में पाठ को खोजने और बदलने के लिए एक खुला स्रोत उपकरण।

विशेषताएं

  • एकल फ़ाइल डाउनलोड - fnr.exe (127kb)
  • विंडोज़ एप्लिकेशन या कमांड लाइन के माध्यम से कई फाइलों में टेक्स्ट को बदलें
  • केवल यह देखने के लिए कि मैच कहां पाए जाते हैं
  • केस-संवेदी खोज
  • एक निर्देशिका में फ़ाइलों की खोज करना या उप-निर्देशिकाओं को पुनरावृत्ति करना
  • नियमित अभिव्यक्ति
  • बहु-पंक्ति पाठ ढूंढें और प्रतिस्थापित करें
  • बैच फ़ाइल में डालने के लिए कमांड लाइन टेक्स्ट बनाने के लिए कमांड लाइन बटन उत्पन्न करें
  • कमांड लाइन की मदद
  • ढूँढें / बदलें इंजन की यूनिट परीक्षण

कमांड लाइन विकल्प देखना

यहाँ छवि विवरण दर्ज करें


1
बहुत अच्छा - आप GUI में अपने "खोज" कथन की जांच कर सकते हैं, "Gen प्रतिस्थापित कमांड लाइन" पर क्लिक कर सकते हैं और कमांड लाइन कॉल का उपयोग करने के लिए तैयार हो सकते हैं। कमांड लाइन सिंटैक्स से परिचित होने के लिए समय बिताने की आवश्यकता नहीं है।
सागर

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

@ जी। यदि यह बैच फ़ाइल से चलाया जाता है, तो <enter> की प्रतीक्षा नहीं है।
सर्जियस ११'१६ को

मैं एक अलग फ़ाइल नाम / विस्तार करने के लिए उत्पादन करने के लिए एक रास्ता नहीं मिल सकता है
रिक

4

ऐसा लगता है कि आप FINDSTR के साथ regex का उपयोग कर सकते हैं

खोज [विंडोज सीएमडी] :

findstr पाठ की खोज करने की अनुमति देता है (जैसा कि फ़ाइल फ़ाइल-नाम में पैटर्न के साथ निर्दिष्ट किया गया है। यदि फ़ाइल-नाम में वाइल्डकार्ड (* या?) है, तो यह उन सभी फ़ाइलों में खोज करता है जो मेल खाते हैं। विकल्प / एस वर्तमान निर्देशिका में भी खोज करता है। इसके उपनिर्देशिकाओं में। यदि पैटर्न में रिक्त स्थान हैं, तो इसे इस तरह निर्दिष्ट किया जाना चाहिए जैसे कि / C: "कुछ पाठ की खोज की जानी चाहिए"। पैटर्न को नियमित अभिव्यक्ति में बदलने के लिए, / R विकल्प का उपयोग किया जाना चाहिए। / I विकल्प खोज मामला असंवेदनशील।

FindStr की सहायता से ( Findstr /?):

/ आर - नियमित अभिव्यक्ति के रूप में खोज स्ट्रिंग का उपयोग करता है।

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word

आपके उत्तर के लिए धन्यवाद, लेकिन यह मेरा सवाल नहीं था।
अजीज

2
findstrफ़ाइलों में पाठ को प्रतिस्थापित नहीं किया जा सकता है!
केनी एविट

4

मुझे पार्टी में थोड़ी देर हो गई है, लेकिन JREPL.BAT एक हाइब्रिड JScript / बैच स्क्रिप्ट आधारित regex यूटिलिटी है, जो किसी भी विंडोज़ मशीन पर XP से आगे की ओर देशी रूप से चलती है।

पूर्ण प्रलेखन स्क्रिप्ट में बनाया गया है, जिसे पृष्ठांकित आउटपुट के माध्यम से JREPL /?या उपयोग किया जा सकता है JREPL /??

JREPL मानक ECMA regex का उपयोग करता है जो JScript के साथ आता है। ECMA रेगेक्स, पॉवरशेल के लिए उपलब्ध .NET रेगेक्स जितना शक्तिशाली नहीं है, लेकिन यह अभी भी बहुत अच्छा है। और मुझे लगता है कि औसत उपयोगकर्ता को पॉवरशेल की तुलना में इस उपयोगिता का उपयोग करना आसान लगेगा।

अंतर्निहित JREPL विकल्प पहले से ही अंतर्निहित शक्ति प्रदान करते हैं, लेकिन उपयोगकर्ता द्वारा आपूर्ति की गई JScript को इंजेक्ट करने की क्षमता वास्तव में अद्भुत संभावनाओं को खोलती है।

मैंने स्क्रिप्ट विकसित की है क्योंकि मेरा कार्यस्थल गैर-मानक exe फ़ाइलों को डाउनलोड करने की अनुमति नहीं देता है, लेकिन बैच यास्क्रिप्ट स्क्रिप्ट लिखने पर कोई प्रतिबंध नहीं है :-)

बस लिंक का पालन करें और स्क्रिप्ट कोड को JREPL.BAT नामक फ़ाइल में कॉपी करें। उपयोग और विकास इतिहास के उदाहरणों के लिए उस थ्रेड से आने वाली पोस्ट पढ़ें। कई StackOverflow के उत्तर भी हैं जो JREPL.BAT का उपयोग करते हैं।


3

दो अच्छे विकल्प या तो साइग्विन हैं जो आपको यूनिक्स-जैसे, बैश-जैसा वातावरण (cmd.exe के विकल्प) देंगे; और Unxutils , व्यक्तिगत यूनिक्स उपयोगिताओं के संग्रह के Win32 पोर्ट। या तो पैकेज में, 'sed', 'awk' और 'grep' देखें।


2
unxutils पुराना है। अब बात gnuwin32
barlop

आपके सुझाव के लिए धन्यवाद JRobert। क्षमा करें कि मुझे यह समझ में नहीं आया, लेकिन अब मैं देख सकता हूं कि एसईडी चीज थी।
अजीज

2018 तक @barlop, gnuwin32 भी अब पुराना हो चुका है .. cygwin आज तक ज्यादा है!
बार्लॉप

0

आप कमांड लाइन खोज और बदलने के लिए GSAR का उपयोग कर सकते हैं । हेक्स और बाइनरी के साथ भी काम करता है। यह जटिल भारी उठाने नहीं करेगा जो रेगेक्स प्रदर्शन कर सकता है, लेकिन बुनियादी खोज और प्रतिस्थापित करने के लिए, यह काम जल्दी और आसानी से करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.