एंड्रॉयड

कैसे bash में लाइन द्वारा एक फ़ाइल लाइन पढ़ने के लिए

Ethical Hacking Full Course - Learn Ethical Hacking in 10 Hours | Ethical Hacking Tutorial | Edureka

Ethical Hacking Full Course - Learn Ethical Hacking in 10 Hours | Ethical Hacking Tutorial | Edureka

विषयसूची:

Anonim

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

इस ट्यूटोरियल में, हम चर्चा करेंगे कि बैश में लाइन द्वारा एक फाइल लाइन कैसे पढ़ें।

एक फाइल लाइन बाय लाइन सिंटेक्स पढ़ना

फ़ाइल लाइन-बाय-लाइन पढ़ने के लिए सबसे सामान्य सिंटैक्स निम्नानुसार है:

while IFS= read -r line do echo "$line" done < input_file

या समकक्ष एकल-पंक्ति संस्करण:

while IFS= read -r line; do echo $line; done < input_file

यह कैसे काम करता है?

इनपुट फ़ाइल ( input_file ) उस फ़ाइल का नाम है जिसे आप read कमांड द्वारा पढ़ने के लिए खोलना चाहते read read कमांड प्रत्येक लाइन को line वैरिएबल पर असाइन करते हुए लाइन द्वारा फाइल लाइन को पढ़ता है। एक बार सभी लाइनों को संसाधित किया जाता है जबकि लूप समाप्त हो जाएगा। आंतरिक क्षेत्र विभाजक ( IFS ) को मुख्य और अनुगामी व्हाट्सएप को संरक्षित करने के लिए नल स्ट्रिंग पर सेट किया गया है जो कि read कमांड का डिफ़ॉल्ट व्यवहार है।

एक फ़ाइल लाइन लाइन उदाहरणों को पढ़ना

आइए निम्नलिखित उदाहरण पर एक नज़र डालें। मान लीजिए, हमारे पास एक फ़ाइल है जिसका नाम distros.txt जिसमें कुछ सबसे लोकप्रिय लिनक्स वितरणों की सूची है और उनके पैकेज प्रबंधकों को अल्पविराम ( , ) से अलग किया गया है:

distros.txt

Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf

फ़ाइल लाइन को लाइन से पढ़ने के लिए आप अपने टर्मिनल में निम्न कोड चलाएंगे:

while IFS= read -r line do echo "$line" done < distros.txt

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

क्या होगा यदि आप केवल वितरण का उपयोग करना चाहते हैं जो उपयुक्त हैं? एक तरीका यह होगा कि यदि स्टेटमेंट का उपयोग किया जाए और चेक किया जाए कि लाइन में उपयुक्त विकल्प है:

while IFS= read -r line do if]; then echo "$line" fi done < distros.txt

Ubuntu, apt Debian, apt

फ़ाइल लाइन को लाइन से पढ़ते समय, आप रीड कमांड पर एक से अधिक चर भी पास कर सकते हैं जो लाइन को IFS आधार पर फ़ील्ड में विभाजित करेगा। पहला क्षेत्र पहले चर को दिया जाता है, दूसरा दूसरे चर को, और इसी तरह। यदि चर से अधिक फ़ील्ड हैं, तो बचे हुए फ़ील्ड को अंतिम चर के लिए असाइन किया गया है।

निम्नलिखित उदाहरण में, हम IFS को कॉमा ( , ) के लिए सेट कर रहे हैं और दो चर distro और pm को रीड कमांड को पास कर रहे हैं। लाइन की शुरुआत से पहले कॉमा तक सब कुछ पहले वेरिएबल ( distro ) को सौंपा जाएगा और बाकी लाइन दूसरे वेरिएबल ( pm ) को सौंपी जाएगी:

while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt

apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora

वैकल्पिक फ़ाइल पढ़ने के तरीके

एक प्रक्रिया प्रतिस्थापन का उपयोग करना

प्रक्रिया प्रतिस्थापन आपको फ़ाइल नाम के रूप में कमांड से आउटपुट पास करने की अनुमति देता है:

while IFS= read -r line do echo "$line" done < <(cat input_file)

यहां एक स्ट्रिंग का उपयोग करना

यहाँ स्ट्रिंग यहाँ दस्तावेज़ का एक प्रकार है। स्ट्रिंग (cat input_file) से रखेगी:

while IFS= read -r line do echo "$line" done <<< $(cat input_file)

फ़ाइल डिस्क्रिप्टर का उपयोग करना

आप फ़ाइल डिस्क्रिप्टर का उपयोग करके लूप को इनपुट भी प्रदान कर सकते हैं:

while IFS= read -r -u9 line do echo "$line" done 9< input_file

फ़ाइल डिस्क्रिप्टर के साथ काम करते समय शेल आंतरिक फ़ाइल डिस्क्रिप्टर के साथ संघर्ष से बचने के लिए 4 और 9 के बीच एक संख्या का उपयोग करें।

निष्कर्ष

बैश में, हम फ़ाइल लाइन-बाय-लाइन को फ़ाइल नाम को कुछ समय के लिए पढ़े गए लूप में इनपुट के रूप में प्रदान करके पढ़ सकते हैं।

बश टर्मिनल