תוכן עניינים:
- קריאת קובץ תחביר שורה אחר שורה
- קריאת קובץ לדוגמה שורה אחר שורה
- שיטות קריאה חלופיות לקבצים
- באמצעות החלפת תהליכים
- באמצעות מחרוזת כאן
- באמצעות מתאר קבצים
- סיכום
כשאתה כותב סקריפטים של באש, אתה תמצא את עצמך לפעמים במצבים שאתה צריך לקרוא קובץ שורה אחר שורה. לדוגמה, יתכן שיש לך קובץ טקסט המכיל נתונים שצריך לעבד על ידי הסקריפט.
במדריך זה נדון כיצד לקרוא קובץ שורה אחר שורה בבאש.
קריאת קובץ תחביר שורה אחר שורה
התחביר הכללי ביותר לקריאת קובץ שורה אחר שורה הוא כדלקמן:
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
קוראת את הקובץ שורה אחר שורה, ומקצה כל
line
למשתנה
line
. לאחר עיבוד כל השורות, לולאת הזמן תסתיים. מפריד השדות הפנימיים (
IFS
) מוגדר למחרוזת null לשמירת מרחב לבן מוביל ונגרר שזו התנהגות ברירת המחדל של הפקודה
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)
באמצעות מחרוזת כאן
Here String הוא גרסה של מסמך Here. המחרוזת
(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 כדי למנוע התנגשות עם מתאר קבצים פנימיים.
סיכום
באש, אנו יכולים לקרוא קובץ שורה אחר שורה על ידי מתן שם הקובץ כקלט לולאת קריאה בזמן.
מסוף bashסקירה: Quick View Plus מאפשר לך לקרוא כמעט כל קובץ עסקי
אם ברצונך להרחיב את יכולות התצוגה המקדימה של Windows, נסה זאת זה השירות צפייה הקובץ. זה משתלב לתוך Explorer ותומך מעל 300 סוגי קבצים, כולל רבים אתה כבר לא יכול להיות הבעלים של התוכנה עבור.
כיצד להפחית תמונה, pdf, גודל קובץ mp3 עם קובץ ממיר
להלן הוראות לצמצום תמונה, PDF, גודל קובץ MP3 עם FileOptimizer.
כיצד להשוות מחרוזות בבאש
כשאתה כותב סקריפטים של Bash, תצטרך לעתים קרובות להשוות בין שני מחרוזות כדי לבדוק אם הם שווים או לא. שני מחרוזות שווים כאשר יש להם אותו אורך ומכילים אותו רצף של תווים.