2011-11-22 20 views
5

sed प्रलेखन से में 'डी' आदेश:sed उपयोगिता

d  Delete the pattern space; immediately start next cycle. 

क्या यह अगले चक्र से क्या मतलब है? मेरी समझ यह है कि sed निम्नलिखित आदेशों को लागू नहीं करेगा कि डी कमांड के बाद और इनपुट स्ट्रीम से अगली पंक्ति को पढ़ना शुरू करें और इसे संसाधित करें। लेकिन ऐसा लगता है कि यह सच नहीं है। इस exampel देखें:

[[email protected] ~]# cat -A test.txt 
aaaaaaaaaaaaaa$ 
$ 
bbbbbbbbbbbbb$ 
$ 
$ 
ccccccccc$ 
ddd$ 
$ 
eeeeeee$ 
[[email protected] ~]# cat test.txt | sed '/^$/d;p;p' 
aaaaaaaaaaaaaa 
aaaaaaaaaaaaaa 
aaaaaaaaaaaaaa 
bbbbbbbbbbbbb 
bbbbbbbbbbbbb 
bbbbbbbbbbbbb 
ccccccccc 
ccccccccc 
ccccccccc 
ddd 
ddd 
ddd 
eeeeeee 
eeeeeee 
eeeeeee 
[[email protected] ~]# 

तो तुरंत अगले चक्र शुरू, पी आदेश किसी भी उत्पादन नहीं होगा।

कोई भी इसे समझाने में मेरी सहायता कर सकता है? धन्यवाद।

उत्तर

7

इसका मतलब है कि sed अगली पंक्ति पढ़ेगा और इसे संसाधित करना शुरू कर देगा।

आपकी टेस्ट स्क्रिप्ट आपके विचारों को नहीं करती है। यह खाली लाइनों से मेल खाता है और उन्हें हटाने के आदेश को लागू करता है। वे प्रकट नहीं होते हैं, इसलिए प्रिंट स्टेटमेंट खाली लाइनों पर लागू नहीं होते हैं। दो प्रिंट कमांड डिलीट कमांड के पैटर्न से जुड़े नहीं हैं, इसलिए गैर-खाली लाइनें तीन बार मुद्रित होती हैं। यदि आप इसके बजाय

sed '/./d;p;p' test.txt # matches all non-empty lines 

रिक्त रेखाओं के अलावा, तीन बार प्रत्येक के अलावा कुछ भी मुद्रित नहीं किया जाएगा। ', पी, पी/घ/^ $':

+0

मुझे यह मिला। धन्यवाद! –

+0

आपका स्वागत है! –

1

क) आप घुंघराले ब्रेसिज़ के साथ एक पैटर्न के लिए कई आदेशों को जोड़ सकते हैं:

sed '/^$/{d;p;p}' test.txt 

aaaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccc 
ddd 
eeeeeee 

आदेश घ केवल खाली लाइनों यहाँ करने के लिए लागू किया जाता है। अन्यथा लाइन 2 अतिरिक्त बार मुद्रित है। पैटर्न को 'p'-command' बांधने के लिए, आपको घुंघराले ब्रेसिज़ बनाना होगा। फिर पी-कमांड भी छोड़ दिया जाता है, लेकिन अगले चक्र को छोड़ने की वजह से, क्योंकि यह मेल नहीं खाता है।

बी) बिल्ली का बेकार उपयोग। (पहले से दिखाया गया है)

+0

ऐसा किया, टिप्पणी हटा दी। –

 संबंधित मुद्दे