2013-01-16 7 views
28

के साथ टेक्स्ट फ़ाइल के पहले 8 वर्ण पढ़ें, मैं केवल टेक्स्ट फ़ाइल के पहले 8 वर्ण पढ़ना चाहता हूं और इसे बैश में एक चर में सहेजना चाहता हूं। क्या बस बैश का उपयोग करके ऐसा करने का कोई तरीका है?बैश

उत्तर

41

आप बाइट्स को पढ़ने के लिए head से पूछ सकते हैं। आपके मामले में आने:

$ head -c 8 <file> 

या एक चर में:

foo=$(head -c 8 <file>) 
1

आप बैश में एक सरणी का उपयोग कर सकते हैं और केवल पहले अक्षर चुन सकते हैं। उन्नत बैश स्क्रिप्टिंग गाइड में अच्छे उदाहरण हैं कि सरणी का उपयोग कैसे करें।

+0

यह वास्तव में केवल आधा जवाब है। आप सरणी से केवल पहले 8 वर्णों का चयन कैसे करेंगे? – chepner

+1

echo $ {arrayZ [@]: 1: 2} # दो तीन यह एबीएस में ठीक है। अनुमोदित, यह कुछ हद तक कठिन है। लूप का उपयोग वैकल्पिक है। "हेड" का उपयोग कर ऊपर बीटीडब्ल्यू समाधान केवल बैश बिल्टिन का उपयोग नहीं कर रहा है। "हेड" एक बाहरी कार्यक्रम है। – mrkafk

6

बैश में

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 

के रूप में के बाद, भागों का उपयोग बैश में, से बचने के लिए एक "|" एक सबहेल में चलाए जाते हैं: "वेरिएबल" केवल उस सबहेल में बदला जाएगा, और वर्तमान शेल को पुनर्प्राप्त करते समय यह नया मान खो गया है।

+0

अंतिम आदेश 'IFS' से' '' 'को केवल निम्न आदेश की अवधि के लिए सेट करें (यहां,' read') –

+0

'bash' का संस्करण 4 '-N' विकल्प पेश करता है, जो' -n 'के रूप में कार्य करता है 'लेकिन delimiters भी अनदेखा करता है। – chepner

+0

मैं काम ^^ पर bash 2.x का उपयोग करता हूं (लेकिन जानना अच्छा है) –