मुझे sed -eस्विच के बारे में कोई दस्तावेज नहीं मिल सकता है , साधारण प्रतिस्थापन के लिए, क्या मुझे इसकी आवश्यकता है?
जैसे
sed 's/foo/bar/'
वी.एस.
sed -e 's/foo/bar/'
मुझे sed -eस्विच के बारे में कोई दस्तावेज नहीं मिल सकता है , साधारण प्रतिस्थापन के लिए, क्या मुझे इसकी आवश्यकता है?
जैसे
sed 's/foo/bar/'
वी.एस.
sed -e 's/foo/bar/'
जवाबों:
मैन पेज से:
-e script, --expression=script
add the script to the commands to be executed
तो आप -eकई भागों में से एक स्क्रिप्ट बनाने के लिए कई विकल्पों का उपयोग कर सकते हैं ।
$ sed -e "s/foo/bar/" -e "/FOO/d"
पहली जगह लेंगे fooसाथ barऔर फिर से युक्त हर पंक्ति को हटा दें FOO।
-e
यह आपके लिए काम कर सकता है:
sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file
प्रत्येक मामले में i(डालें), a(परिशिष्ट) और c(परिवर्तन) आदेशों को एक नई पंक्ति द्वारा समाप्त करने की आवश्यकता है।
आम तौर पर आदेशों को एक ;उदाहरण के /foo/d;/bar/dआधार पर अलग किया जा सकता है और {...} द्वारा वर्गीकृत किया जा सकता है, /foo/{h;d}लेकिन i,a,cआदेशों के लिए आदेशों को -eअलग करने का एक तरीका प्रदान करता है।
विकल्प एक नई पंक्ति सम्मिलित करने के लिए शेल (बैश) का उपयोग करना है:
sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file
-eसाथ-साथ लेबल और ब्रांच कमांड को भी नए सिरे से इस्तेमाल करने की जरूरत है । यह काम नहीं करेगा sed ':a; /x/ { s/x/y/g; ba }; q' <<< "jxm":। लेकिन यह होगा:sed -e ':a' -e '/x/ { s/x/y/g; ba' -e '}; q' <<< "jxm"
must be terminated with a newlineयहां वाक्यांश का मतलब कितना आवश्यक है । जब मैंने यहाँ अपने में परीक्षण किया cygwin, तो यह काम करता है sed '/foo/i\bar' file:। इसलिए अब जब हम अलग-अलग भावों को एक साथ जोड़ सकते हैं, तो यह फिर से मूल प्रश्न पर उठता है: इसका असली उद्देश्य क्या है -e?
मदद के लिए sedआप पाएंगे कि -eझंडा खड़ा है:
-e script, --expression=script
add the script to the commands to be executed
लेकिन आप मुठभेड़ के बाद भ्रमित होने वाले पहले व्यक्ति नहीं हैं -e। आपके उदाहरण में sed 's/foo/bar/'और sed -e 's/foo/bar/'समतुल्य हैं। दोनों ही मामलों s/foo/bar/में स्क्रिप्ट है जिसे sed द्वारा निष्पादित किया जाता है। दूसरा विकल्प अधिक स्पष्ट है, लेकिन यह संभवतः वह कारण नहीं है जिसे आप अक्सर -eउपयोग करते देखते हैं । इसका कारण यह है कि -eएक ही आह्वान के साथ एक से अधिक स्क्रिप्ट का उपयोग करना संभव बनाता है sed। यह अभी भी सवाल छोड़ देता है कि यदि आप केवल एक स्क्रिप्ट का उपयोग कर रहे हैं तो इसका उपयोग क्यों करें? निम्नलिखित उदाहरण बता सकते हैं कि:
echo "foo" | sed -e 's/foo/bar/' -e 's/bar/foo'
"फू" का उत्पादन करेगा।
हालाँकि,
echo "foo" | sed 's/foo/bar/' -e 's/bar/foo'
विफल हो जाएगा क्योंकि अब sedपहले s/foo/barएक फ़ाइल नाम के रूप में व्याख्या करता है । इसलिए, भविष्य के लिए जीवन को आसान बनाने के लिए, आप पहले से ही -eआज ध्वज का उपयोग करना शुरू कर सकते हैं। इस तरह से भविष्य में आप केवल एक अतिरिक्त स्क्रिप्ट के साथ कमांड का उपयोग कर सकते हैं -e <script>।
NB अन्य ;लिपियों का उपयोग करने के विकल्प के रूप में उपयोग करने वाले अन्य उत्तरों का सुझाव दिया गया है। जबकि कुछ मामलों में यह तकनीकी रूप से संभव है, इसे प्रोत्साहित नहीं किया जाता है, क्योंकि यह जल्दी से कोड पढ़ने के लिए बहुत कठिन हो जाता है। यहां एक उदाहरण देखें: https://www.grymoire.com/Unix/Sed.html#uh-61
man sed?