में एम्बेडेड एक स्क्रिप्ट स्क्रिप्ट में बैकस्लाश से कैसे बचूं मैं बैश स्क्रिप्ट में एक स्क्रिप्ट स्क्रिप्ट के माध्यम से एक फ़ाइल संपादित करना चाहता हूं। मैं इसे बाद में बनाए रखना आसान बनाना चाहता हूं; समझने और संशोधित करने में आसान है। प्रतिस्थापन स्ट्रिंग लगता है:मैं बैश स्क्रिप्ट
PS1='\[\e[1;32m\][\[email protected]\h \W]\$\[\e[0m\]'
एक आदर्श दुनिया में, यह इस चाहते हैं:
sed -i "s/^PS1.*$/PS1='\[\e[1;32m\][\[email protected]\h \W]\$\[\e[0m\]'/g" /etc/skel/.bashrc
समस्या यह है कि पार्टी और एसईडी फ़ाइल में निम्न परिणाम दे रही है \
बाहर अलग करना कर रहे हैं:
PS1='[e[1;32m][@h W]$[e[0m]'
जाहिर है एकल उद्धरण का उपयोग नहीं किया जा सकता है। एक जानवर बल समाधान पलायन उपयोग करने के लिए है, लेकिन यह काम करने के लिए मैं एक बहुत बदसूरत दिखने लाइन मिलती है:
sed -i "s/^PS1.*$/PS1='\\\\[\\\\e[1;32m\\\\][\\\\[email protected]\\\\h \\\\W]\\\\$\\\\[\\\\e[0m\\\\]'/g" /etc/skel/.bashrc
मैं (बाह्य फ़ाइलों का उपयोग नहीं) स्क्रिप्ट पठनीय और आत्म निहित होना चाहता हूँ। उपर्युक्त के लिए कोई विकल्प?
रेगेक्स की तरह किसी भी चीज के आसपास एकल कोट्स का उपयोग करें जब तक कि आपको स्ट्रिंग में इंटरफेरेटेड कुछ चर की आवश्यकता न हो। फिर भी, अधिकांश रेगेक्स के आस-पास एकल उद्धरणों का उपयोग करें, और केवल उस भाग के चारों ओर डबल कोट्स का उपयोग करें जिन्हें इंटरपोलेट किया जाना चाहिए। एक निर्मित उदाहरण का उपयोग करना: 'sed -e' s /\.\*'"$ 1 "'\ * \ ./ ab'" $ 2 "'c' \ '' d/'$ 3' या उन पंक्तियों के साथ कुछ। अनुक्रम '' \ '' 'है कि आप कमांड लाइन में एक एकल उद्धरण कैसे एम्बेड करते हैं; पहला एकल उद्धरण वर्तमान सिंगल-कोट अनुभाग को समाप्त करता है; बैकस्लैश-कोट स्ट्रिंग में एक एकल उद्धरण एम्बेड करता है; तीसरा एकल उद्धरण एकल उद्धरण को फिर से शुरू करता है। –