खाली लाइनों की उपेक्षा
यहाँ एक दृष्टिकोण का उपयोग किया गया है awk
:
echo "$TEST" | tac | awk 'f==0 && /./ {f=NR} END{if(f==NR){exit 0}; exit 1 }' && echo "Found A Single Line"
यह काम किस प्रकार करता है:
गूंज "$ टेस्ट"
इसमें जो भी शेल वैरिएबल होता है, उसे हम ले लेते हैं और इसे स्टैंडर्ड आउट पर भेज देते हैं।
tac
यह लाइनों के क्रम को उलट देता है ताकि अंतिम पंक्ति पहले वापस आ जाए। निष्पादित करने के बाद tac
, अनुगामी लाइनें अग्रणी रेखाएं बन जाती हैं।
(नाम उस कारण tac
के cat
लिए रिवर्स tac
है जो cat
करता है लेकिन रिवर्स में करता है।)
awk 'f==0 && /./ {f=NR} END{if(f==NR){exit 0}; exit 1 }'
यह चर में पहली गैर-रिक्त रेखा की पंक्ति संख्या को संग्रहीत करता है f
। सभी लाइनों में पढ़ने के बाद, यह तुलना f
, लाइनों की कुल संख्या के NR
। यदि f
इसके बराबर है NR
, तो हमारे पास बस एक ही लाइन थी (प्रारंभिक रिक्त को अनदेखा करते हुए) और हम कोड के साथ बाहर निकलते हैं। 0. यदि पहली रिक्त लाइन के बाद एक या अधिक लाइनें थीं, तो यह कोड `के साथ बाहर निकलता है।
&& echo "Found A Single Line"
यदि awk
कोड 0 के साथ बाहर निकलता है, तो echo
कथन निष्पादित किया जाता है।
खाली लाइनों के अग्रणी और अनुगामी दोनों को अनदेखा करना
एक अतिरिक्त awk
वैरिएबल बनाकर , हम खाली लाइनों की अग्रणी और अनुगामी दोनों को अनदेखा करने के लिए परीक्षण का विस्तार कर सकते हैं:
echo "$TEST" | awk 'first==0 && /./ {first=NR} /./ {last=NR} END{if(first==last){exit 0}; exit 1 }' && echo " Found A Single Line"
क्योंकि awk
कोड का यह संस्करण प्रमुख और अनुगामी दोनों रिक्त स्थान को संभालता है, tac
अब इसकी आवश्यकता नहीं है।
ले रहा है awk
कोड एक समय में एक टुकड़ा:
first==0 && /./ {first=NR}
यदि चर first
शून्य है (या इसे अभी तक सेट नहीं किया गया है) और लाइन में एक चरित्र, कोई भी चरित्र है, तो first
लाइन नंबर पर सेट करें। जब awk
लाइनों को पढ़ा जाता है, first
तो पहले गैर-रिक्त लाइन की लाइन संख्या पर सेट किया जाएगा।
/./ {last=NR}
यदि रेखा में कोई वर्ण है, तो चर last
को वर्तमान रेखा संख्या पर सेट करें । जब awk
सभी पंक्तियों को पढ़ने के लिए किया जाता है, तो इस चर में अंतिम गैर-रिक्त रेखा की पंक्ति संख्या होगी।
END{if(first==last){exit 0}; exit 1 }
सभी लाइनों को पढ़ने के बाद इसे निष्पादित किया गया। यदि first
बराबर है last
, तो हमने शून्य या लाइन को गैर-रिक्त लाइनों के रूप में देखा है और awk
कोड के साथ बाहर निकलता है 0
। अन्यथा, यह कोड के साथ बाहर निकलता है 1
। खोल स्क्रिप्ट के साथ हमेशा की तरह बाहर निकलने के कोड का परीक्षण कर सकते if
बयान या &&
या ||
।