स्थानापन्न कमांड में विस्मय बोधक चिह्न (!) द्वारा स्लैश (/) को बदलने का क्या अर्थ है?


13

मैंने हाल ही में एक स्थानापन्न कमांड देखा जहां लेखक ने इस तरह से /प्रतिस्थापित किया था !::s!abc!ABC!g

मैंने इस उपयोग पर कुछ दस्तावेज खोजने की कोशिश की, लेकिन मुझे कुछ भी प्रासंगिक नहीं मिला। इसलिए मैंने अपने आप से प्रयोग करने की कोशिश की और एक बार फिर मैं दो संकेतों के बीच वास्तविक अंतर का पता नहीं लगा सका। यहाँ मैं क्या पाया:

  • यह मिश्रण !और /एक कमांड में संभव नहीं है । उदाहरण के लिए :s!abc/ABCविफल।
  • एक पैटर्न में !भागने से बचने के लिए इसका उपयोग करना उपयोगी हो सकता है /। उदाहरण के लिए अगर मैं बदलना चाहते हैं </के साथ %मैं उपयोग कर सकते हैं :%s!</!%!gके बजाय :%s/<\//%/g
  • ऐसा लगता है कि कुछ मामलों में कुछ रेगेक्स के साथ काम नहीं करेगा /और ठीक से काम करेगा , !लेकिन जैसा कि मैं वास्तव में एक रेग्क्स विशेषज्ञ नहीं हूं, मुझे यकीन नहीं है।

तो मेरा सवाल सरल है: !एक विकल्प कमांड में उपयोग करने का क्या फायदा है और मुझे इसके बजाय इसका उपयोग कब करना चाहिए /?



वास्तव में मैंने गलती से एक डबल पोस्ट किया मैंने कुछ मिनट पहले इसे झंडी दिखा दी यह जानने के लिए कि मुझे क्या करना चाहिए।
statox

जवाबों:


22

से :help :global:

'/' के बजाय जो चारों ओर से घिरा है {pattern}, आप किसी अन्य एकल बाइट वर्ण का उपयोग कर सकते हैं, लेकिन वर्णमाला वर्ण नहीं, '\', '' 'या'। ''। यदि आप '/' को शामिल करना चाहते हैं तो यह उपयोगी है। खोज पैटर्न या प्रतिस्थापन स्ट्रिंग।

जैसा कि आप पहले से ही अपने प्रयोग से तैयार हैं, यह तथाकथित " लीनिंग टूथपिक सिंड्रोम " को रोकने के लिए है । इस पर विचार करो:

:%s/\/home\/martin\/test/\/home\/jake\/x/

बनाम:

:%s!/home/martin/test!/home/jake/x!

दूसरा रूप स्पष्ट रूप से बहुत अधिक पठनीय है।

यह एकमात्र कारण है जिससे आप सीमांकक को बदल सकते हैं; इसे हम मनुष्यों के लिए अधिक पठनीय बनाना है। कंप्यूटर परवाह नहीं करता है।

जीएनयू में कुछ अन्य कार्यक्रम और भी अधिक लचीले हैं, sedउदाहरण के लिए आप चाहें xतो सीमांकक के रूप में उपयोग कर सकते हैं । sed sxaxbxg fileके रूप में ही है sed s/a/b/g file


पठनीयता के लिए, मैं पसंद करता हूं (और सुझाव देता हूं) :%s@/home/martin/test@/home/jake/x@, "वसा" के रूप में @यह देखना और भी आसान बनाता है कि कथन के व्यक्तिगत भाग कहां से शुरू होते हैं या समाप्त होते हैं।
DevSolar

@DevSolar मैंने पाया :%s#/home/martin/test#/home/jake/x#कि काम और भी बेहतर है, लेकिन यह सिर्फ व्यक्तिगत राय है।
अमित गोल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.