Sed में `-n` विकल्प क्या करता है?


13

इसके लिए मैन पेज प्रविष्टि है -n:

-n

पैटर्न अंतरिक्ष के स्वत: मुद्रण को दबाने

मुझे लगता है कि जब कुछ कार्यों के लिए उपयोग नहीं-n किया जाता है, तो प्रत्येक पंक्ति stdout में मुद्रित होती है (और अनुरोधित लाइनें दो बार मुद्रित होती हैं):

$ cat test.txt 
first
second
third
fourth
fifth

$ sed -n '2,3p' test.txt 
second
third

$ sed '2,3p' test.txt 
first
second
second
third
third
fourth
fifth

हालाँकि, यह कानून अन्य आदेशों के लिए नहीं है:

$ sed -n 's/t/T/' test.txt 

$ sed 's/t/T/' test.txt 
firsT
second
Third
fourTh
fifTh

तो क्या करता -nहै, बिल्कुल?

जवाबों:


17

आम तौर पर, sed प्रत्येक पंक्ति (प्रतिस्थापन आदि) को संसाधित करता है, फिर परिणाम प्रिंट करता है। यदि प्रोसेसिंग में प्रिंट की जाने वाली लाइन शामिल है (जैसे कि sed की pकमांड), तो यह दो बार प्रिंट हो जाती है (एक बार प्रोसेसिंग के दौरान, फिर ऑटोमैटिक पोस्ट-प्रोसेसिंग प्रिंट द्वारा)। -nविकल्प स्वत: मुद्रण, जो लाइनों आप विशेष रूप से मुद्रित करने के लिए मुद्रित नहीं मिलता यह नहीं बताया मतलब है अक्षम कर देता है, और लाइनों आप स्पष्ट रूप से मुद्रित करने के लिए यह बताऊँ (साथ जैसे p) केवल एक बार मुद्रित मिलता है।

  • sed -n '2,3p' test.txt - केवल अनुरोध के अनुसार 3 के माध्यम से 2 लाइनों को प्रिंट करता है

  • sed '2,3p' test.txt - प्रत्येक लाइन (स्वचालित रूप से) को प्रिंट करता है, और ALSO दूसरी बार 2-3 लाइनों को प्रिंट करता है

  • sed -n 's/t/T/' test.txt - प्रत्येक पंक्ति पर "टी" के साथ "टी" को प्रतिस्थापित करता है, लेकिन परिणाम को प्रिंट नहीं करता है -n

  • sed 's/t/T/' test.txt - प्रत्येक पंक्ति पर "टी" के साथ "टी" को प्रतिस्थापित करता है, और स्वचालित रूप से परिणाम प्रिंट करता है

और मुझे कुछ और उदाहरण जोड़ने दें:

  • sed -n 's/t/T/p' test.txt - प्रत्येक पंक्ति पर "टी" के साथ "टी" की जगह, केवल उन लाइनों को प्रिंट करता है जहां प्रतिस्थापन हुआ (यानी "दूसरा" नहीं)

  • sed 's/t/T/p' test.txt - प्रत्येक पंक्ति पर "टी" के साथ "टी" को प्रतिस्थापित करता है, जहां लाइनों का प्रतिस्थापन होता है, तो स्वचालित रूप से प्रत्येक पंक्ति को प्रिंट करता है (परिणाम: "दूसरा" एक बार मुद्रित होता है, अन्य सभी दो बार)

  • sed '2,3p; 3p' test.txt- 1 (4, और एक बार ऑटो प्रिंट) लाइनों 1, 4, और 5 प्रिंट करता है; लाइन 2 दो बार (पहली pकमांड फिर ऑटो प्रिंट), और लाइन 3 तीन बार (प्रत्येक pकमांड के लिए एक बार , फिर स्वचालित रूप से)।


धन्यवाद गॉर्डन लेकिन आपका आकलन केवल मेरे अवलोकन को दोहराता है। पहले दो उदाहरणों में बिना -nरेखाओं के प्रिंट हर तरह से उन लाइनों के अलावा विशेष रूप से अनुरोध किए गए हैं। इस प्रकार उस स्थिति -n में हर पंक्ति के मुद्रण को दबा दिया जाता है । हालांकि तीसरे और चौथे उदाहरण में व्यवहार अलग है। उन मामलों में बिना sed -nदो बार लाइनों को आउटपुट नहीं करता है, इस प्रकार उपयोग करने से पार्स की गई हर लाइन की प्रिंटिंग को दबाया-n नहीं जाता है , बल्कि उन लाइनों की प्रिंटिंग को दबा दिया जाता है जो परिवर्तित नहीं हुई हैं । मुझे यह सामान्य करने में कठिनाई हो रही है कि व्यवहार एक या दूसरे से कब होगा।
डॉटनकहेन

नहीं है, दोनों ही मामलों में -nसटीक एक ही बात कर रहा है: हर पंक्ति से स्विच स्वचालित रूप से मुद्रित किया जा रहा है (और pऔर pएक विधा जहां लाइनों मुद्रित कर रहे हैं करने के लिए एक विकल्प के कमांड लाइन कारण करने के लिए आपरिवर्तक अतिरिक्त बार मुद्रित करने के लिए) केवल यदि आप विशेष रूप से यह बताना ( pकमांड आदि के साथ)।
गॉर्डन डेविसन

इसे अन्य तरीके से रखें: -nविकल्प और ALSO को जोड़कर ; psed कमांड में जोड़ने का प्रयास करें (जैसे sed -n '2,3p; p', और आपको वही परिणाम मिलेंगे जो आपके पास भी होंगे। -nडिफ़ॉल्ट स्वत: प्रिंट को दबा देता है, और ; pएक स्पष्ट (अधिकतर समतुल्य) जोड़ता है ) प्रिंट।
गॉर्डन डेविसन

मैं अब देखता हूं, धन्यवाद। उदाहरण को स्पष्ट करने में मदद करने के लिए समय निकालने के लिए मैं आपकी बहुत सराहना करता हूं। एक भयानक सप्ताह है!
१०:४४ पर डिटानचेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.