के साथ टेक्स्ट फ़ाइल के पहले 8 वर्ण पढ़ें, मैं केवल टेक्स्ट फ़ाइल के पहले 8 वर्ण पढ़ना चाहता हूं और इसे बैश में एक चर में सहेजना चाहता हूं। क्या बस बैश का उपयोग करके ऐसा करने का कोई तरीका है?बैश
बैश
उत्तर
आप बाइट्स को पढ़ने के लिए head
से पूछ सकते हैं। आपके मामले में आने:
$ head -c 8 <file>
या एक चर में:
foo=$(head -c 8 <file>)
आप बैश में एक सरणी का उपयोग कर सकते हैं और केवल पहले अक्षर चुन सकते हैं। उन्नत बैश स्क्रिप्टिंग गाइड में अच्छे उदाहरण हैं कि सरणी का उपयोग कैसे करें।
बैश में
help read
आप देखेंगे कि आप कर सकते हैं:
read -r -n 8 variable < .the/file
आप तो पहले 8 को पढ़ना चाहते हैं, विभाजक से स्वतंत्र,
IFS= read -r -n 8 variable < .the/file
लेकिन
.... | while IFS= read -r -n 8 variable
के रूप में के बाद, भागों का उपयोग बैश में, से बचने के लिए एक "|" एक सबहेल में चलाए जाते हैं: "वेरिएबल" केवल उस सबहेल में बदला जाएगा, और वर्तमान शेल को पुनर्प्राप्त करते समय यह नया मान खो गया है।
अंतिम आदेश 'IFS' से' '' 'को केवल निम्न आदेश की अवधि के लिए सेट करें (यहां,' read') –
'bash' का संस्करण 4 '-N' विकल्प पेश करता है, जो' -n 'के रूप में कार्य करता है 'लेकिन delimiters भी अनदेखा करता है। – chepner
मैं काम ^^ पर bash 2.x का उपयोग करता हूं (लेकिन जानना अच्छा है) –
यह वास्तव में केवल आधा जवाब है। आप सरणी से केवल पहले 8 वर्णों का चयन कैसे करेंगे? – chepner
echo $ {arrayZ [@]: 1: 2} # दो तीन यह एबीएस में ठीक है। अनुमोदित, यह कुछ हद तक कठिन है। लूप का उपयोग वैकल्पिक है। "हेड" का उपयोग कर ऊपर बीटीडब्ल्यू समाधान केवल बैश बिल्टिन का उपयोग नहीं कर रहा है। "हेड" एक बाहरी कार्यक्रम है। – mrkafk