यह पटकथा जब तक आप कुछ सूक्ष्म gotchas से निपटने के रूप में एक खोल में लाइन द्वारा एक लिनक्स पाठ फ़ाइल लाइन की सामग्री पढ़ने की बहुत आसान है। यहाँ यह सुरक्षित तरीके से करना बताया गया है।
फ़ाइलें, पाठ, और मुहावरे
प्रत्येक प्रोग्रामिंग भाषा मुहावरों का एक सेट है। ये मानक फ़्रिल रहित सामान्य कार्यों का एक सेट को पूरा करने के तरीके हैं। वे भाषा प्रोग्रामर के साथ काम कर रहा है की सुविधाओं में से एक का उपयोग करने के प्राथमिक या डिफ़ॉल्ट तरीका है। वे मानसिक ब्लूप्रिंट की एक प्रोग्रामर की टूलकिट का हिस्सा बन जाते हैं।
, फ़ाइलों से डाटा पढ़ने छोरों के साथ काम करने, और दो चरों के मान की अदला-बदली की तरह क्रिया अच्छे उदाहरण हैं। प्रोग्रामर कम से कम एक तरह से एक सामान्य या वेनिला फैशन में उनके सिरों को प्राप्त करने के पता चल जाएगा। शायद यह है कि हाथ में आवश्यकता के लिए पर्याप्त होगा। या हो सकता है कि वे इसे और अधिक कुशल या विशिष्ट समाधान वे विकसित कर रहे हैं के लिए लागू करने के लिए कोड को सुशोभित करेंगे। लेकिन उनकी उंगलियों पर इमारत ब्लॉक मुहावरा होने के लिए एक महान शुरुआती बिंदु है।
यह जानते हुए और एक ही भाषा में मुहावरों को समझने के लिए इसे आसान ऊपर एक नया प्रोग्रामिंग भाषा भी लेने के लिए बनाता है। यह जानते हुए कि कैसे चीजों को एक ही भाषा में निर्माण कर रहे हैं और बराबर-या की तलाश में निकटतम बात में किसी अन्य भाषा एक अच्छा तरीका है प्रोग्रामिंग भाषाओं के बीच समानता और अंतर आप पहले से ही जानते हैं और एक तुम हो सीखने की सराहना करने के लिए है।
एक फ़ाइल से लाइन्स पढ़ना: एक लाइनर
बैश में, आप एक का उपयोग कर सकते
जबकि
कमांड लाइन पर पाश एक फ़ाइल से पाठ की प्रत्येक पंक्ति पढ़ सकते हैं और इसके साथ कुछ करने के लिए। हमारे पाठ फ़ाइल "data.txt।" कहा जाता है यह साल के महीने की एक सूची है।
जनवरी फ़रवरी जुलूस । । अक्टूबर नवंबर दिसंबर
हमारे सरल एक लाइनर है:
जबकि पढ़ने लाइन; गूंज $ लाइन करते हैं; किया गया & lt; data.txt
NS
जबकि
पाश फ़ाइल से एक लाइन पढ़ता है, और थोड़ा कार्यक्रम के निष्पादन के प्रवाह लूप के शरीर के लिए गुजरता है। NS
गूंज
आदेश टर्मिनल विंडो में पाठ की पंक्ति लिखता है। पढ़ने प्रयास विफल रहता है जब वहाँ कोई और अधिक लाइनों पढ़ने के लिए कर रहे हैं, और पाश किया जाता है।
एक साफ चाल की क्षमता है [5 9] एक पाश में एक फ़ाइल पुनर्निर्देशित करने के लिए । अन्य प्रोग्रामिंग भाषाओं में, आप जब आप समाप्त होता फ़ाइल, यह से पढ़ने को खोलने की आवश्यकता होगी, और पास इसे फिर से। बैश के साथ, आप बस फ़ाइल पुनर्निर्देशन का उपयोग करें और खोल संभाल कि निम्न स्तर के सामान के सभी आप के लिए दे सकते हैं।
बेशक, इस एक लाइनर बहुत उपयोगी नहीं है। लिनक्स पहले से ही प्रदान करता है
बिल्ली
आदेश है, जो वास्तव में हमारे लिए करता है। हम एक तीन अक्षर आदेश को बदलने के लिए एक घना रास्ता बना लिया है। लेकिन यह दिख एक फ़ाइल से पढ़ने के सिद्धांतों को प्रदर्शित करता है।
यही कारण है कि काफी अच्छी तरह से काम करता है, एक बात करने के लिए। मान लीजिए कि हमें महीनों के नाम शामिल हैं जो किसी अन्य पाठ फ़ाइल है। इस फ़ाइल में एक नई पंक्ति चरित्र के लिए एस्केप अनुक्रम प्रत्येक पंक्ति के साथ जोड़ दिया गया है। हम इसे "data2.txt।" फोन करता हूँ
जनवरी \ N फ़रवरी \ N मार्च \ N । । अक्टूबर \ N नवम्बर \ N दिसम्बर \ N
चलो हमारे नए फ़ाइल पर हमारे एक लाइनर का उपयोग करते हैं।
जबकि पढ़ने लाइन; गूंज $ लाइन करते हैं; किया गया & lt; data2.txt
बैकस्लैश भागने चरित्र "
\
"त्याग दिया गया है। नतीजा यह है कि एक "n" प्रत्येक पंक्ति के साथ जोड़ दिया गया है। बैश एक की शुरुआत के रूप बैकस्लैश व्याख्या करने के तरीके
निकास का क्रम
। अक्सर, हम बैश व्याख्या करने के लिए यह क्या पढ़ रही है नहीं करना चाहती। यह अपनी संपूर्णता-बैकस्लैश भागने दृश्यों में एक पंक्ति और पढ़ने के सभी और पार्स आउट कर क्या करने के लिए या बदलने के अपने आप को, अपने खुद के कोड के भीतर चयन करने के लिए और अधिक सुविधाजनक हो सकता है।
हम पाठ की तर्ज पर किसी भी सार्थक प्रसंस्करण या पार्स क्या करना चाहते हैं, तो हम एक स्क्रिप्ट का उपयोग करने की आवश्यकता होगी।
एक स्क्रिप्ट के साथ एक फ़ाइल से लाइन्स पढ़ना
यहाँ हमारे स्क्रिप्ट है। यह "script1.sh।" कहा जाता है
#! / Bin / bash
काउंटर = 0
, जबकि आईएफएस = '' पढ़ -r LinefromFile [116 ] || [[ -n " $ {LinefromFile} " ] ] करना
(( काउंटर ++ ))
गूंज "पंक्ति को एक्सेस करना $ काउंटर $ {LinefromFile} " [9 ]
किया के & lt; " $ 1 "
हम एक चर कहा सेट
काउंटर
शून्य करने के लिए है, तो हम अपने को परिभाषित
जबकि
कुंडली।
जबकि लाइन पर पहले बयान है
आईएफएस = ''
।
भारतीय विदेश सेवा
आंतरिक क्षेत्र विभाजक के लिए खड़ा है। यह मान मानती है कि बैश शब्द सीमाओं की पहचान के लिए उपयोग करता है। डिफ़ॉल्ट रूप से, पढ़ें आदेश बंद स्ट्रिप्स प्रमुख और रिक्त स्थान को अनुगामी। हम फ़ाइल बिल्कुल के रूप में वे कर रहे हैं से लाइनों को पढ़ने के लिए चाहते हैं, हम सेट करने की जरूरत है
भारतीय विदेश सेवा
खाली स्ट्रिंग के लिए।
हम पाश के इस एक बार के बाहर सेट कर सकते हैं, जैसे हम का मूल्य स्थापित कर रहे हैं
काउंटर
। लेकिन अधिक जटिल लिपियों-विशेष रूप से कई उपयोगकर्ता परिभाषित कार्यों के साथ उन लोगों के साथ उन्हें यह संभव है कि
भारतीय विदेश सेवा
स्क्रिप्ट में कहीं और विभिन्न मूल्यों के लिए सेट किया जा सकता है। यह सुनिश्चित करना कि
भारतीय विदेश सेवा
एक रिक्त स्ट्रिंग पर हर बार सेट कर दिया जाता
जबकि
पाश की गारंटी देता है iterates हम जानते हैं कि क्या उसके व्यवहार किया जाएगा।
हम एक चर कहा में पाठ की एक पंक्ति को पढ़ने के लिए जा रहे हैं
LinefromFile
। हम प्रयोग कर रहे हैं
-आर
विकल्प बैकस्लैश अनदेखी करने के लिए (एक सामान्य चरित्र के रूप में बैकस्लैश पढ़ें)। वे सिर्फ किसी अन्य चरित्र की तरह व्यवहार किया जाएगा और किसी भी विशेष उपचार प्राप्त नहीं होगा।
वहाँ दो की स्थिति है कि पूरा करेगा कर रहे हैं
जबकि
पाश और अनुमति देने के पाठ पाश के शरीर से संसाधित करने के लिए:
-
[21 9]
पढ़ -r LinefromFile
: टेक्स्ट की पंक्ति में सफलतापूर्वक फ़ाइल से पढ़ने जाता है,
पढ़ना
आदेश करने के लिए एक सफलता संकेत भेजता है
जबकि
, और यह
जबकि
पाश पाश की शरीर के लिए निष्पादन प्रवाह गुजरता है। ध्यान दें कि
पढ़ना
आदेश एक को देखने के लिए की जरूरत है
न्यू लाइन चरित्र
आदेश में पाठ की पंक्ति के अंत में यह एक सफल पठन विचार करने के लिए। यदि फ़ाइल एक नहीं है
POSIX
शिकायत पाठ फ़ाइल,
अंतिम पंक्ति एक नई पंक्ति चरित्र शामिल नहीं हो सकता
। अगर
पढ़ना
आदेश में देखता है
फ़ाइल मार्कर के अंत
लाइन से पहले (EOF) एक नई पंक्ति से समाप्त हो जाता है, यह
नहीं
एक सफल पठन के रूप में यह व्यवहार करते हैं। अगर ऐसा होता है, पाठ की अंतिम पंक्ति लूप के शरीर के लिए नहीं पहुंच पाएगी और संसाधित नहीं किया जाएगा।
[21 9]
[-N "$ {LinefromFile}"]
: हम कुछ अतिरिक्त काम गैर POSIX संगत फ़ाइलों को संभालने के लिए क्या करने की जरूरत। इस तुलना के चेक पाठ कि फ़ाइल से पढ़ा जाता है। यह एक नई पंक्ति चरित्र के साथ समाप्त नहीं है, तो इस तुलना अभी भी करने के लिए सफलता वापस आ जाएगी
जबकि
कुंडली। यह सुनिश्चित करता है तो अवांछित लाइन टुकड़े पाश के शरीर द्वारा संसाधित कर रहे हैं।
[24 9]
इन दो खंड या तार्किक ऑपरेटर "से अलग होते हैं
||
"तो यह है कि अगर
दोनों में से एक
खंड रिटर्न सफलता, पुनः प्राप्त पाठ लूप के शरीर द्वारा संसाधित किया जाता है, एक नई पंक्ति चरित्र है कि क्या वहाँ है या नहीं।
हमारे पाश के शरीर में, हम incrementing रहे हैं
काउंटर
एक और का उपयोग करके चर
गूंज
टर्मिनल विंडो के लिए कुछ उत्पादन भेजने के लिए। लाइन नंबर और प्रत्येक पंक्ति का पाठ प्रदर्शित होते हैं।
हम अभी भी एक पाश में एक फ़ाइल पुनर्निर्देशित करने के लिए हमारे पुनर्निर्देशन चाल का उपयोग कर सकते हैं। इस मामले में, हम $ 1 एक चर है कि पहली कमांड लाइन पैरामीटर है कि स्क्रिप्ट के लिए पारित का नाम धारण रीडायरेक्ट करते हैं,। इस चाल का उपयोग करना, हम आसानी से डेटा फ़ाइल के नाम में पारित कर सकते हैं कि हम स्क्रिप्ट पर काम करना चाहते हैं।
कॉपी करके किसी संपादक में स्क्रिप्ट पेस्ट और फ़ाइल नाम के साथ सहेजें "script1.sh।" उपयोग
चम्मद
आदेश
यह निष्पादन योग्य बनाने के लिए
।
chmod + x script1.sh
देखते हैं क्या हमारी स्क्रिप्ट data2.txt पाठ फ़ाइल का बना देता है और बैकस्लैश इसके भीतर शामिल हैं।
./ script1.sh data2.txt
[28 9]
लाइन में हर चरित्र शब्दशः प्रदर्शित होता है। बैकस्लैश भागने वर्ण समझ नहीं कर रहे हैं। वे नियमित रूप से पात्रों के रूप में मुद्रित कर रहे हैं।
[2 9 3] एक समारोह के लिए लाइन पासिंगहम अभी भी सिर्फ पाठ को स्क्रीन पर गूंज रहे हैं। एक वास्तविक दुनिया प्रोग्रामिंग परिदृश्य में, हम संभावना पाठ की पंक्ति के साथ और अधिक दिलचस्प कुछ करने के लिए के बारे में होगा। ज्यादातर मामलों में, यह एक और समारोह में रेखा के आगे की प्रक्रिया को संभालने के लिए एक अच्छा प्रोग्रामिंग अभ्यास है।
यहाँ हम इसे कैसे कर सकता है। यह "script2.sh है।"
[29 9] #! / Bin / bash
काउंटर = 0
समारोह process_line () {
गूंज "प्रसंस्करण लाइन $ काउंटर $ 1 " [9 ]
}
, जबकि आईएफएस = '' पढ़ -r LinefromFile [116 ] || [[ -n " $ {LinefromFile} " ] ] करना
(( काउंटर ++ ))
process_line " $ LinefromFile "
किया के & lt; " $ 1 "