לדלג לתוכן

grep sed ו-awk - כלי עיבוד הטקסט החזקים של לינוקס

בלינוקס כמעט הכל הוא טקסט - קבצי קונפיגורציה, לוגים, פלט של פקודות. וזו בדיוק הסיבה ששלושה כלים ותיקים - grep, sed ו-awk - עדיין נחשבים בין הכלים החזקים ביותר בטרמינל, למרות שכולם קיימים כבר עשרות שנים. ברגע שמבינים מה כל אחד מהם עושה, ואיך משלבים ביניהם, אתם מקבלים יכולת לחפש ולעבד כמעט כל דבר בלי לפתוח אף עורך טקסט.

grep - למצוא מחט בערימת שחת

grep הוא הכלי שמחפש שורות שתואמות לתבנית מסוימת בתוך קובץ, או בפלט של פקודה אחרת. השם עצמו מגיע מפקודה ותיקה בעורך טקסט שנקראה global regular expression print, וזה בדיוק מה שהוא עושה - מחפש בכל הקובץ שורות שמתאימות לביטוי, ומדפיס אותן.

grep "error" server.log

הפקודה הזו תדפיס כל שורה בקובץ הלוגים שמכילה את המילה error. עם דגלים נוספים אפשר להרחיב מאוד את היכולת - grep -i מתעלם מרישיות, grep -r מחפש רקורסיבית בכל תיקייה, ו-grep -v מציג דווקא את השורות שלא תואמות לתבנית. וכשמשלבים ביטויים רגולריים - regular expressions - אפשר לחפש תבניות מורכבות הרבה יותר ממילה בודדת.

sed - עורך זרימה שלא פותח שום קובץ

sed, ראשי תיבות של stream editor, הוא כלי שמבצע שינויים בטקסט תוך כדי מעבר עליו, בלי לפתוח שום עורך גרפי. השימוש הכי נפוץ שלו הוא החלפת טקסט:

sed 's/http/https/g' urls.txt

הפקודה הזו עוברת על כל שורה בקובץ, ומחליפה כל מופע של "http" ב-"https". ה-s בהתחלה אומר substitute, וה-g בסוף אומר לעשות את זה לכל מופע בשורה, לא רק לראשון שנמצא. sed שימושי במיוחד כשצריך לבצע שינוי זהה על עשרות או מאות שורות בבת אחת, משהו שידני לוקח דקות ועם sed לוקח שנייה.

awk - כשצריך לחשוב בעמודות

awk הוא הכלי המתוחכם מבין השלושה, ובעצם שפת תכנות קטנה בפני עצמה. הכוח האמיתי שלו הוא בעבודה עם נתונים מובנים בעמודות - קבצי CSV, פלט של פקודות כמו ls -l, או כל טקסט שמחולק לשדות בעזרת רווח או תו הפרדה אחר.

awk '{print $1, $3}' data.txt

הפקודה הזו מדפיסה רק את העמודה הראשונה והשלישית מכל שורה. awk גם תומך בתנאים, לולאות, ומשתנים, מה שהופך אותו לכלי שיכול להחליף סקריפט שלם בשורה אחת, כשמכירים אותו טוב.

הכוח האמיתי - לשלב ביניהם

הקסם קורה כשמשלבים את שלושת הכלים יחד באמצעות pipe, בדיוק כמו שדיברנו במאמר על צינורות בלינוקס. למשל, אם רוצים למצוא את כתובות ה-IP הכי נפוצות בקובץ לוגים, אפשר לשלב grep שמסנן שורות רלוונטיות, awk שמוציא רק את עמודת הכתובת, ו-sort עם uniq שסופרים וממיינים - הכל בשורת פקודה אחת, בלי כתיבת שום קוד.

מתי להשתמש בכל אחד

כלל אצבע פשוט - אם אתם רק מחפשים שורות, grep מספיק. אם אתם צריכים להחליף או למחוק טקסט, sed הוא הכלי. ואם אתם צריכים לעבוד עם עמודות, לחשב, או להפעיל לוגיקה על נתונים מובנים, awk הוא מה שאתם צריכים. שלושתם עדיין רלוונטיים היום כי הם מהירים, זמינים בכל מערכת לינוקס כמעט בלי יוצא מן הכלל, ועובדים מצוין בתוך סקריפטים אוטומטיים.

לסיכום

grep, sed ו-awk הם לא כלים מיושנים - הם עדיין הדרך המהירה ביותר לחפש ולעבד טקסט בטרמינל, גם בעידן של כלים גרפיים מתוחכמים. השקעה של כמה שעות בלימוד היסודות שלהם משתלמת שוב ושוב, בכל פעם שצריך לנבור בקובץ לוגים ענק או לתקן מאות שורות בבת אחת.

רוצים להעמיק עוד בטרמינל ובכלי הליבה של לינוקס? יש לנו קורס לינוקס בסיסי מלא בחינם שבונה את הידע הזה מהיסוד.

יש לכם שאלה על grep, sed, awk או כלי טרמינל אחרים? בואו לדבר בדיסקורד.

הצטרפו לקהילה בדיסקורד