sed
इन-प्लेस एडिटिंग
खोज…
वाक्य - विन्यास
- sed- मैं विस्तार - FreeBSD sed (निरंतर लाइन-काउंटर)
- sed -I [ विस्तार ] - NetBSD और इलुमोस sed (निरंतर लाइन-काउंटर)
- sed -i एक्सटेंशन - FreeBSD sed
- sed -i [ एक्सटेंशन ] - NetBSD, OpenBSD, Illumos, BusyBox और GNU sed
- सीड - इन-प्लेस [= एक्सटेंशन ] - इलुमोस, बिजीबॉक्स और जीएनयू सेड
पैरामीटर
पैरामीटर | विवरण |
---|---|
extension | निर्दिष्ट एक्सटेंशन के साथ एक बैकअप फ़ाइल सहेजें, या extension शून्य-शून्य स्ट्रिंग होने पर कोई बैकअप फ़ाइल नहीं। |
टिप्पणियों
इन-प्लेस एडिटिंग एक सामान्य लेकिन गैर-मानक विस्तार है जो हाल के सिस्टमों के बहुमत में मौजूद है।
(इस तरह का एक खंड सभी वर्तमान बीएसडी sed
मैनुअल, और उनके डेरिवेटिव में दिखाई देता है)
फाइलों को संपादित करते समय शून्य लंबाई विस्तार देने की अनुशंसा नहीं की जाती है, क्योंकि यह उन स्थितियों में भ्रष्टाचार या आंशिक सामग्री को जोखिम में डाल देता है जहां डिस्क स्थान का उपयोग किया जाता है, आदि।
शक्तिशाली ed
मत भूलना
निश्चित रूप से sed
लिए इन-प्लेस और इन-एडिट एडिटिंग फीचर्स का उपयोग होता sed
, लेकिन जब UNIX मानक बढ़ाया जाता है, तो हमें हमेशा यह पूछना चाहिए कि पुराने UNIX मानक में वह फीचर शामिल क्यों नहीं था। यद्यपि UNIX परिपूर्ण नहीं है, लेकिन उपकरणों की पूर्णता और पूर्णता को पूर्णता के काफी निकट होने के लिए विकसित किया गया है, कम से कम उन उद्देश्यों के लिए जहां 1970 के आसपास दिखाई देते हैं: पाठ संपादन और स्वचालित पाठ संपादन निश्चित रूप से उस समय के आसपास दिखाई देता था।
दरअसल, sed
का विचार किसी फाइल को जगह में संपादित करना नहीं है, बल्कि एक स्ट्रीम को संपादित करना है । इसलिए नाम sed
धारा संपादक का संक्षिप्त रूप है। s
हटा दें, और आपको वह टूल मिलता है जो वास्तव में फ़ाइल संपादन के लिए डिज़ाइन किया गया था: ed
:
printf 'g/what to replace/s//with what to replace/g\nw\nq\n' | ed file
or cat file_edit_commands | ed file
।
एक फ़ाइल में जगह की जगह तार
sed -i s/"what to replace"/"with what to replace"/g $file
हम $file
फ़ाइल पर इन-प्लेस संपादन का चयन करने के लिए -i
का उपयोग करते हैं। कुछ प्रणालियों में -i
ध्वज के बाद प्रत्यय जोड़ना आवश्यक होता है जो मूल फ़ाइल का बैकअप बनाने के लिए उपयोग किया जाएगा। आप बैकअप निर्माण से बाहर निकलने के लिए रिक्त स्ट्रिंग जैसे -i ''
जोड़ सकते हैं। -i
विकल्प के बारे में इस विषय में रिमार्क्स को देखें।
g
टर्मिनेटर का अर्थ है प्रत्येक पंक्ति में एक वैश्विक खोज / प्रतिस्थापित करना।
$ cat example
one
two
three
total
$ sed -i s/"t"/"g"/g example
$ cat example
one
gwo
ghree
gogal
पोर्टेबल उपयोग
इन-प्लेस संपादन, जबकि आम, एक गैर-मानक विशेषता है। एक व्यवहार्य विकल्प मूल, या आउटपुट को स्टोर करने के लिए एक मध्यवर्ती फ़ाइल का उपयोग करना होगा।
sed 'sed commands' > file.out && mv file.out file
# or
mv file file.orig && sed 'sed commands' file.orig > file
GNU और FreeBSD दोनों सिंटैक्स के साथ -i
विकल्प का उपयोग करने के लिए एक एक्सटेंशन को निर्दिष्ट करना चाहिए और -i
विकल्प में जोड़ा जाना चाहिए। निम्नलिखित दोनों द्वारा स्वीकार किया जाएगा, और दो फाइलें, पर मूल संस्करण का उत्पादन file.orig
और कम से संपादित संस्करण file
:
sed -i.orig 'sed commands' file
फ़ाइल file
दिया गया एक मूल उदाहरण देखें:
$ cat file
one
two
three
$ sed -i.orig 's/one/XX/' file
$ cat file # the original file has changed its content
XX
two
three
$ cat file.orig # the original content is now in file.orig
one
two
three
एक अधिक जटिल उदाहरण, प्रत्येक पंक्ति को पंक्ति संख्या के साथ प्रतिस्थापित करना:
$ printf 'one\ntwo\n' | tee file1 | tr a-z A-Z > file2
$ sed -ni.orig = file1 file2
$ cat file1.orig file2.orig
one
two
ONE
TWO
$ cat file1 file2
1
2
1
2
क्यों एक बैकअप फ़ाइल की आवश्यकता है
बिना बैकअप फ़ाइल के इन-प्लेस एडिटिंग का उपयोग करने के लिए -i
को एक शून्य-लंबाई तर्क दिया जाना चाहिए और FreeBSD sed
को -i
लिए एक तर्क की आवश्यकता होती है, या तो जोड़ा या अलग किया जाना चाहिए, जबकि GNU वैकल्पिक तर्क एक्सटेंशन में तर्क को संलग्न करने की आवश्यकता होती है -i
। दोनों तर्क को -i
समर्थन करने का समर्थन करते हैं, लेकिन इसके लिए आवश्यक होने के बिना -i'' command
-कमांड को -i extension
से अप्रभेद्य है, और इसलिए शून्य लंबाई तर्क को -i
जोड़ा नहीं जा सकता है।
बैकअप फ़ाइल निर्दिष्ट किए बिना इन-प्लेस संपादन रीड-ओनली अनुमतियों को ओवरराइड करता है
sed -i -e cmd file
को संशोधित करेगा file
अपनी अनुमतियाँ केवल पढ़ने के लिए सेट कर रहे हैं, भले ही।
यह आदेश समान व्यवहार करता है
sed -e cmd file > tmp; mv -f tmp file
बजाय
sed -e cmd file > tmp; cat tmp > file; rm tmp
निम्न उदाहरण ग्नू sed
का उपयोग करता है:
$ echo 'Extremely important data' > input
$ chmod 400 input # Protect that data by removing write access
$ echo 'data destroyed' > input
-bash: input: Permission denied
$ cat input
Extremely important data (#phew! Data is intact)
$ sed -i s/important/destroyed/ input
$ cat input
Extremely destroyed data (#see, data changed)
i
विकल्प के साथ SUFFIX
निर्दिष्ट करके एक बैकअप बनाकर इसे कम किया जा सकता है:
$ sed -i.bak s/important/destroyed/ input
$ cat input
Extremely destroyed data
$ cat input.bak
Extremely important data