यह उत्तर कार्य प्रगति पर है - यह susbstitute कमांड के बारे में अधिक उदाहरणों को याद करता है
क्या है sed
?
sed
= स्ट्रीम एडिटर
GNU sed
4.2.2 रिपोर्ट के मैनुअल पेज में विवरण :
सैड एक स्ट्रीम एडिटर हैं। एक धारा संपादक एक इनपुट स्ट्रीम (एक पाइपलाइन से एक फ़ाइल या इनपुट) पर मूल पाठ परिवर्तनों को करने के लिए उपयोग किया जाता है। जबकि कुछ मायनों में एक संपादक के समान जो स्क्रिप्टेड एडिट्स (जैसे एड) की अनुमति देता है, सेड इनपुट (एस) पर केवल एक पास बनाकर काम करता है, और फलस्वरूप अधिक कुशल होता है। लेकिन यह एक पाइपलाइन में पाठ को छानने की सीड की क्षमता है जो विशेष रूप से इसे अन्य प्रकार के संपादकों से अलग करती है।
में decription जीएनयू sed
gnu.org पर पेज की रिपोर्ट:
sed (स्ट्रीम एडिटर) एक इंटरैक्टिव टेक्स्ट एडिटर नहीं है। इसके बजाय, इसका उपयोग पाठ को फ़िल्टर करने के लिए किया जाता है, अर्थात, यह पाठ इनपुट लेता है, उस पर कुछ ऑपरेशन (या संचालन का सेट) करता है, और संशोधित पाठ को आउटपुट करता है। आमतौर पर फ़ाइल के एक भाग को निकालने के लिए sed का उपयोग पैटर्न मिलान या फ़ाइल के भीतर स्ट्रिंग की कई घटनाओं को प्रतिस्थापित करने के लिए किया जाता है।
किसके लिए sed
प्रयोग किया जाता है?
इसका उपयोग डेटा की धाराओं (आमतौर पर पाठ, लेकिन बाइनरी डेटा को संशोधित करने के लिए भी किया जा सकता है) के लिए जटिल संशोधनों को करने के लिए किया जा सकता है।
उपयोग के सबसे सामान्य मामलों में से हैं:
- मूल / विस्तारित नियमित अभिव्यक्तियों का उपयोग करके पाठ फ़ाइल से लाइनों को मुद्रण / हटाने के लिए
- वैश्विक रूप से मूल / विस्तारित नियमित अभिव्यक्तियों का उपयोग करके एक पाठ फ़ाइल में स्ट्रिंग की जगह
- मूल / विस्तारित नियमित अभिव्यक्तियों का उपयोग करके पाठ फ़ाइल में स्ट्रिंग की जगह लेना
यह इस उत्तर में शामिल उपयोग के मामले हैं।
प्रयोग
sed
फाइलसिस्टम में संग्रहीत फ़ाइल से इनपुट को पढ़ता है यदि एक फ़ाइल नाम उसके आह्वान के दौरान कमांड-लाइन तर्कों में निर्दिष्ट किया गया है, या stdin
यदि कोई फ़ाइल नाम निर्दिष्ट नहीं है।
फ़ाइल सिस्टम में संग्रहीत फ़ाइल का उपयोग करके न्यूनतम आमंत्रण:
sed '' file
उपयोग कर न्यूनतम आमंत्रण stdin
:
# herestring
<<<'Hello, World!' sed ''
# heredoc
<<'EOF' sed ''
heredoc> Hello, World!
heredoc> EOF
# file
<'file' sed ''
# pipe
echo 'Hello, World!' | sed ''
नमस्ते दुनिया!
sed
डिफ़ॉल्ट रूप से इनपुट फ़ाइल लाइन-बाय-लाइन पढ़ता है; यह एक पंक्ति पढ़ता है, यह लाइन की अनुगामी न्यूलाइन को हटा देता है और प्रोसेस्ड लाइन को "पैटर्न स्पेस" में डाल देता है; अंत में, यह पैटर्न स्पेस की वर्तमान सामग्री पर सूचीबद्ध कमांड को निष्पादित करता है और इनपुट फ़ाइल से एक नई लाइन पढ़ता है।
जब कोई कमांड निर्दिष्ट नहीं होती है या जब p
या एक d
कमांड निर्दिष्ट किया जाता है *, sed
तो हमेशा प्रत्येक पुनरावृत्ति पर एक नई लाइन के बाद पैटर्न स्पेस की वर्तमान सामग्री को प्रिंट करेगा चाहे:
user@debian ~ % sed '' file
Hello, world! # no command but the lines are printed
user@debian ~ % sed 'p' file
Hello, World!
Hello, World! # the p command prints the lines already printed
user@debian ~ % sed 'd' file
user@debian ~ % # the d command deletes the lines that would be printed
इसे रोकने के लिए एक स्विच sed
के साथ आह्वान किया जा सकता है -n
:
user@debian ~ % sed -n '' file
user@debian ~ % sed -n 'p' file
Hello, World!
user@debian ~ % sed -n 'd' file
user@debian ~ %
* के लिए ही बात हो रही है p
, d
और s
आदेश, जो इस जवाब में शामिल आदेशों हैं।
लाइनों का चयन
sed
पूरे इनपुट फ़ाइल को प्रोसेस कर सकते हैं या इनपुट फ़ाइल के केवल चयनित लाइनों को प्रोसेस कर सकते हैं; संसाधित की जाने वाली इनपुट फ़ाइल की पंक्तियों का चयन "पते" को निर्दिष्ट करके किया जाता है; एक पता (अन्य बातों के अलावा) एक पंक्ति संख्या या एक पैटर्न हो सकता है; पतों की श्रेणियों को पतों की श्रेणी निर्दिष्ट करके चुना जा सकता है।
पतों के संभावित संयोजन हैं:
<N>
(जहां <N>
एक संख्या है): निम्नलिखित कमांड / कमांड केवल लाइन नंबर पर निष्पादित किए जाएंगे <N>
;
<N>,<M>
(जहाँ <N>
और <M>
दो संख्याएँ हैं, <N>
> <M>
): निम्न आदेश / आदेशों को लाइन संख्या <N>
से लाइन संख्या <M>
समावेशी तक की रेखाओं पर निष्पादित किया जाएगा ;
/<pattern>/
(जहां <pattern>
एक बुनियादी या विस्तारित नियमित अभिव्यक्ति है): निम्नलिखित आदेश / आदेशों को केवल एक घटना युक्त लाइनों पर निष्पादित किया जाएगा <pattern>
;
/<pattern1>/,/<pattern2>/
(जहां <pattern1>
और <pattern2>
मूल या विस्तारित नियमित अभिव्यक्ति हैं): निम्नलिखित आदेश / आदेशों को पहली पंक्ति से लेकर <pattern1>
अगली पंक्ति की घटना वाली एक घटना से युक्त रेखाओं पर निष्पादित किया जाएगा <pattern2>
, जिसमें कई बार आदेश दिए गए <pattern1>
- कई आदेशों के मामले में <pattern2>
;
<N>,/pattern/
(जहां <N>
एक संख्या है और <pattern>
एक मूल या विस्तारित नियमित अभिव्यक्ति है): निम्नलिखित कमांड / कमांड को लाइन नंबर <N>
से पहली पंक्ति तक की रेखाओं पर निष्पादित किया जाएगा, जिसमें एक घटना होती है <pattern>
;
/pattern/,<N>
(जहां <pattern>
एक मूल या विस्तारित नियमित अभिव्यक्ति है और <N>
एक संख्या है): निम्नलिखित कमांड / कमांड को पहली पंक्ति से लेकर <pattern>
लाइन नंबर की घटना से युक्त लाइनों पर निष्पादित किया जाएगा <N>
;
लाइनों के रेंज पर प्रतिस्थापन को प्रिंट करने, हटाने या निष्पादित करने के लिए किया गया चयन हमेशा निर्दिष्ट पते से मेल खाती लाइनों को शामिल करेगा; इसके अलावा, पैटर्न का उपयोग करके लाइनों की सीमाओं पर प्रिंट, हटाने या प्रदर्शन करने के लिए किया गया चयन आलसी और वैश्विक है (यानी, प्रत्येक प्रभावित सीमा हमेशा संभव के रूप में सबसे छोटी होगी, और कई रेंज प्रभावित होंगे)।
जब लाइनों की प्रिंटिंग रेंज या केवल उन लाइनों को प्रिंट करना जिस पर एक प्रतिस्थापन का प्रदर्शन किया गया है, तो मानदंड से मेल खाने वाली लाइनों को दो बार मुद्रित करने से रोकने के sed
लिए -n
स्विच के साथ-साथ आह्वान करना आवश्यक है (यह केवल तब होता है जब लाइनों की छपाई रेंज होती है) और क्रम में मानदंड मुद्रित करने के लिए लाइनों की परवाह किए बिना मुद्रित होने से रोकने के लिए।
संसाधित की जाने वाली लाइनों का चयन एक कमांड द्वारा या कई अर्धविराम से अलग-अलग कमांडों को ब्रेसिज़ का उपयोग करके किया जाना चाहिए।
कमांड्स: प्रिंट करें, हटाएं
एक चयन को मुद्रित करने या हटाने के लिए उपयोग की जाने वाली कमांड क्रमशः हैं:
p
: निर्दिष्ट पते / पते की सीमा से मेल खाती लाइनें;
d
: निर्दिष्ट पते / पते की श्रेणी से मेल खाती लाइनें हटाता है;
जब इन आदेशों में से एक पते / चयन से पहले नहीं होता है , तो कमांड को वैश्विक रूप से निष्पादित किया जाता है, अर्थात इनपुट फ़ाइल की प्रत्येक पंक्ति पर।
उदाहरण: प्रिंट करना, हटाना
संख्यात्मक पते निर्दिष्ट करने वाली लाइनें मुद्रण / हटाना:
नमूना फ़ाइल:
line1
line2
line3
line4
line5
sed -n '<N>p' file
user@debian ~ % sed -n '3p' file
line3
sed '<N>d' file
user@debian ~ % sed '3d' file
line1
line2
line4
line5
- समावेशी के
<N>
लिए मुद्रण लाइन <M>
:
sed -n '<N>,<M>p' file
user@debian ~ % sed -n '2,4p' file
line2
line3
line4
- समावेशी के
<N>
लिए लाइन हटाना <M>
:
sed '<N>,<M>d' file
user@debian ~ % sed '2,4d' file
line1
line5
पैटर्न निर्दिष्ट करने वाली लाइनें मुद्रण / हटाना:
नमूना फ़ाइल:
First line
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
Last line
- मुद्रण लाइनों का मिलान
<pattern>
:
sed -n '/<pattern>/p' file
user@debian ~ % sed -n '/print/p' file
Start printing / deleting here
Stop printing / deleting here
- मिलान रेखाएँ हटाना
<pattern>
:
sed '/<pattern>/d' file
user@debian ~ % sed '/print/d' file
First line
Random line
Random line
Random line
Last line
- समावेशी
<pattern1>
रेखा से मेल खाती रेखा से मुद्रण रेखाएँ <pattern2>
:
sed -n '/<pattern1>/,/<pattern2>/p' file
user@debian ~ % sed -n '/Start/,/Stop/p' file
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
- समावेशी
<pattern1>
रेखा से मेल खाती रेखा से रेखाओं को हटाना <pattern2>
:
sed '/<pattern1>/,/<pattern2>/d' file
user@debian ~ % sed '/Start/,/Stop/d' file
First line
Last line
आज्ञा: स्थानापन्न
चयन पर प्रतिस्थापन का कार्य करने के लिए कमांड का उपयोग किया जाता है:
s
: निर्दिष्ट पते / पते की सीमा से मेल खाती लाइनें;
जब यह आदेश एक पते / चयन से पहले नहीं होता है , तो कमांड को वैश्विक रूप से निष्पादित किया जाता है, अर्थात इनपुट फ़ाइल की प्रत्येक पंक्ति पर।
s
कमांड का सिंटैक्स है:
s/<pattern>/<replacement_string>/<pattern_flags>
स्लैश "सीमांकक" हैं; वे परिसीमित करने के लिए उपयोग किया जाता है <pattern>
, <replacement_string>
और <pattern_flags>
वर्गों;
s
कमांड के तुरंत बाद सीमांकक हमेशा चरित्र होता है ; इसे किसी अन्य वर्ण पर सेट किया जा सकता है, उदाहरण के लिए |
:
s|<pattern>|<replacement_string>|<pattern_flags>
<pattern>
एक मूल या विस्तारित नियमित अभिव्यक्ति है; <replacement_string>
एक निश्चित स्ट्रिंग है जिसमें sed
एक विशेष अर्थ के साथ विशिष्ट अनुक्रम शामिल हो सकते हैं ; <pattern_flags>
झंडे की एक सूची है जो के व्यवहार को संशोधित करती है <pattern>
।
sed
एक विशेष अर्थ के साथ सबसे आम- विशिष्ट अनुक्रम:
&
: बैकरेंस को मिलान किए गए स्ट्रिंग के साथ बदल दिया गया <pattern>
;
\<N>
(जहां <N>
एक संख्या है): बैकरेफरेंस को उस पर <N>
कब्जा किए गए समूह के साथ बदल दिया गया <pattern>
;
सबसे आम झंडे:
g
: <pattern>
विश्व स्तर पर, यानी प्रत्येक पंक्ति में कई बार मैच करने के लिए मजबूर करता है;
i
: <pattern>
केस-असंवेदनशीलता से मेल खाने के लिए मजबूर करता है;
p
: उन लाइनों को प्रिंट करता है जिन पर एक प्रतिस्थापन को एक बार फिर से प्रदर्शित किया जाता है (उपयोगी है जब -n
स्विच का उपयोग sed
केवल उन लाइनों को प्रिंट करने के लिए जिस पर एक प्रतिस्थापन किया गया है);
उदाहरण: स्थानापन्न
नमूना फ़ाइल:
A-well-a everybody's heard about the bird
B-b-b-bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, the bird is the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a don't you know about the bird?
Well, everybody knows that the bird is the word!
A-well-a bird, bird, b-bird's the word
A-well-a...
- प्रत्येक पंक्ति के
<pattern>
साथ पहली घटना को प्रतिस्थापित करना <replacement_string>
:
sed 's/<pattern>/<replacement_string>/' file
user@debian ~ % sed 's/bird/birds/' file
A-well-a everybody's heard about the birds
B-b-b-birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, the bird is the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, bird, b-bird's the word
- के सभी आवृत्तियां की जगह
<pattern>
के साथ <replacement_string>
प्रत्येक पंक्ति पर:
sed 's/<pattern>/<replacement_string>/g' file
user@debian ~ % sed 's/bird/birds/g' file
A-well-a everybody's heard about the birds
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, birds, b-birds's the word
A-well-a...
- केवल लाइनों के साथ शुरू का चयन
<pattern1>
और के सभी आवृत्तियां की जगह <pattern2>
के साथ <replacement_string>
:
sed -n '/^<pattern1>/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/^A/s/bird/birds/pg' file
A-well-a everybody's heard about the birds
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
A-well-a birds, birds, b-birds's the word
- केवल लाइनों के साथ समाप्त होने का चयन
<pattern1>
और के सभी आवृत्तियां की जगह <pattern2>
के साथ <replacement_string>
:
sed -n '/<pattern1>$/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/word$/s/bird/birds/pg' file
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, b-birds's the word
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.