यहाँ व्याख्या के दो स्तर हैं: शेल, और सेड।
शेल में, सिंगल कोट्स के बीच सब कुछ शाब्दिक रूप से व्याख्या किया जाता है, केवल सिंगल कोट्स के अलावा। आप प्रभावी रूप से एकल उद्धरणों के बीच एक एकल उद्धरण लिख सकते हैं '\''
(करीबी एकल उद्धरण, एक शाब्दिक एकल उद्धरण, खुला एकल उद्धरण)।
सैड बुनियादी नियमित अभिव्यक्ति का उपयोग करता है । BRE में, उन्हें शाब्दिक रूप से व्यवहार $.*[\^
करने के लिए, वर्ण सेट के अंदर ( […]
) छोड़कर, एक बैकस्लैश द्वारा वर्णों को उद्धृत करने की आवश्यकता होती है । पत्र, अंक और (){}+?|
उद्धृत नहीं किया जाना चाहिए (आप कुछ कार्यान्वयन में इनमें से कुछ को उद्धृत करने के साथ दूर हो सकते हैं)। दृश्यों \(
, \)
, \n
, और कुछ कार्यान्वयन में \{
, \}
, \+
, \?
, \|
और अन्य बैकस्लैश + अक्षर या अंक विशेष अर्थ है। आप $^
कुछ कार्यान्वयनों में कुछ पदों पर उद्धृत नहीं कर सकते हैं ।
इसके अलावा, यदि आपको /
ब्रैकेट अभिव्यक्ति के बाहर रेगेक्स में प्रदर्शित होना है , तो आपको बैकस्लैश की आवश्यकता होगी । आप एक वैकल्पिक चरित्र को परिसीमन के रूप में लिखकर चुन सकते हैं, जैसे, s~/dir~/replacement~
या \~/dir~p
; यदि आप इसे BRE में शामिल करना चाहते हैं, तो आपको सीमांकक से पहले बैकस्लैश की आवश्यकता होगी। यदि आप एक ऐसे चरित्र का चयन करते हैं जिसका BRE में एक विशेष अर्थ है और आप इसे शाब्दिक रूप से शामिल करना चाहते हैं, तो आपको तीन बैकस्लैश की आवश्यकता होगी; मैं इसकी अनुशंसा नहीं करता, क्योंकि यह कुछ कार्यान्वयनों में अलग तरह से व्यवहार कर सकता है।
संक्षेप में, इसके लिए sed 's/…/…/'
:
- एकल उद्धरणों के बीच रेगेक्स लिखें।
'\''
रेगेक्स में एक एकल उद्धरण के साथ समाप्त करने के लिए उपयोग करें ।
- पहले
$.*/[\]^
और केवल उन पात्रों (लेकिन ब्रैकेट अभिव्यक्तियों के अंदर नहीं) में एक बैकस्लैश डालें । (तकनीकी तौर पर आपको इससे पहले कोई बैकस्लैश नहीं डालना चाहिए ]
लेकिन मुझे ऐसे कार्यान्वयन के बारे में नहीं पता है जो व्यवहार करता है ]
और \]
अलग - अलग कोष्ठक अभिव्यक्तियों के बाहर है।)
- ब्रैकेट अभिव्यक्ति के अंदर,
-
शाब्दिक रूप से व्यवहार किए जाने के लिए, सुनिश्चित करें कि यह पहले या अंतिम ( [abc-]
या [-abc]
नहीं [a-bc]
) है।
- ब्रैकेट अभिव्यक्ति के अंदर,
^
शाब्दिक रूप से व्यवहार किए जाने के लिए, सुनिश्चित करें कि यह पहले नहीं है (उपयोग करें [abc^]
, नहीं [^abc]
)।
- शामिल करने के लिए
]
एक ब्रैकेट अभिव्यक्ति के अनुरूप पात्रों की सूची में, यह पहली चरित्र (या पहले के बाद बनाना ^
: एक नकार सेट के लिए) []abc]
या [^]abc]
(नहीं [abc]]
है और न ही[abc\]]
)।
प्रतिस्थापन पाठ में:
&
और \
उन्हें एक बैकस्लैश द्वारा उद्धृत करने से पहले उद्धृत करने की आवश्यकता है, जैसा कि सीमांकक (आमतौर पर /
) और newlines।
\
अंक के बाद एक विशेष अर्थ होता है। \
पत्र के बाद कुछ कार्यान्वयन में एक विशेष अर्थ (विशेष वर्ण) होता है, और \
इसके बाद कुछ अन्य चरित्र साधन \c
या c
कार्यान्वयन पर निर्भर करता है।
- तर्क (
sed 's/…/…/'
) के चारों ओर एकल उद्धरणों के साथ , '\''
प्रतिस्थापन पाठ में एकल उद्धरण लगाने के लिए उपयोग करें।
यदि रेगेक्स या प्रतिस्थापन पाठ शेल चर से आता है, तो याद रखें
- रेगेक्स एक BRE है, न कि शाब्दिक तार।
- रेगेक्स में, एक नई पंक्ति को व्यक्त करने की आवश्यकता होती है
\n
(जो तब तक मेल नहीं खाएगी जब तक कि आपके पास sed
पैटर्न स्थान पर नई पंक्ति वर्ण जोड़ने का कोई अन्य कोड न हो )। लेकिन ध्यान दें कि यह कुछ sed
कार्यान्वयन के साथ ब्रैकेट एक्सप्रेशन के अंदर काम नहीं करेगा ।
- प्रतिस्थापन पाठ में
&
, \
और newlines को उद्धृत करने की आवश्यकता है।
- परिसीमन को उद्धृत किया जाना चाहिए (लेकिन ब्रैकेट के भावों के अंदर नहीं)।
- प्रक्षेप के लिए दोहरे उद्धरण चिह्नों का उपयोग करें
sed -e "s/$BRE/$REPL/"
:।
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed