ذكري المظهر

كيفية قراءة ملف سطر بسطر في باش

مهم جدا : مدة صلاحية تأشيرة شينغن وكيفية قراءتها قبل السفر | لا تيأس : مثال لشخص بسيط حصل على الفيزا

مهم جدا : مدة صلاحية تأشيرة شينغن وكيفية قراءتها قبل السفر | لا تيأس : مثال لشخص بسيط حصل على الفيزا

جدول المحتويات:

Anonim

عند كتابة البرامج النصية لـ Bash ، ستجد نفسك في بعض الأحيان في مواقف تحتاج فيها إلى قراءة سطر ملف بسطر. على سبيل المثال ، قد يكون لديك ملف نصي يحتوي على بيانات يجب معالجتها بواسطة البرنامج النصي.

في هذا البرنامج التعليمي ، سنناقش كيفية قراءة سطر ملف بسطر في Bash.

قراءة ملف سطر حسب بناء جملة الخط

بناء الجملة الأكثر قراءة لقراءة ملف سطراً كما يلي:

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 . يقوم أمر القراءة بقراءة سطر الملف بسطر ، مع تعيين كل line لمتغير line . بمجرد الانتهاء من معالجة جميع الخطوط ، تنتهي الحلقة. يتم تعيين فاصل الحقل الداخلي ( IFS ) إلى السلسلة الخالية للحفاظ على المسافة البادئة والزائدة وهو السلوك الافتراضي لأمر read .

قراءة ملف سطر حسب أمثلة الخط

دعنا نلقي نظرة على المثال التالي. لنفترض ، لدينا ملف باسم distros.txt يحتوي على قائمة ببعض توزيعات Linux الأكثر شيوعًا ومديري الحزم مفصولة بفاصلة ( , ):

distros.txt

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

لقراءة سطر الملف بسطر ، يمكنك تشغيل الكود التالي في جهازك:

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

سوف تقرأ الشفرة الملف بسطر ، وتعيين كل سطر لمتغير ، وتردد المتغير. من الأساسي أن ترى نفس الإخراج كما لو كنت ستعرض محتوى الملف باستخدام أمر cat.

ماذا لو كنت ترغب في طباعة التوزيعات التي تستخدم apt فقط؟ إحدى الطرق هي استخدام عبارة if وتحقق مما إذا كان السطر يحتوي على السلسلة الفرعية apt:

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 لتجنب التعارض مع واصفات الملف الداخلي shell.

استنتاج

في Bash ، يمكننا قراءة ملف بسطر عن طريق توفير اسم الملف كمدخل إلى حلقة من الوقت للقراءة.

محطة باش