כאשר אנו מריצים פקודות מסוימות בלינוקס כדי לקרוא או לערוך טקסט ממחרוזת או קובץ, אנו בדרך כלל מנסים לסנן את הפלט לסעיף ספציפי המעניין. זהו המקום בו שימוש בביטויים רגולריים מתברר כשימות.
מהם ביטויי הרגילים?
A regular expression can be defined as strings that represent several sequences of characters. One of the most important things about regular expressions is that they allow you to filter the output of a command or file, edit a section of a text or configuration file, and so on.
מאפיינים של ביטויים רגילים
ביטויים רגילים מורכבים מ־:
- תווים רגילים כמו רווח, קו תחתון (_), A-Z, a-z, 0-9.
- תווי מטא שמתרחבים לתווים רגילים, כוללים:
(.)
הוא מתאים לכל תו יחיד מלבד שורת חדש.(*)
הוא מתאים לאפס או יותר מופעים של התו הישיר שלפניו.[תו או תווים]
מתאים לאחד מהתווים המצויינים בתוו או בתווים, אפשר גם להשתמש במקף(-)
כדי לציין טווח של תווים כמו[a-f]
,[1-5]
, וכו'.^
הוא מתאים להתחלת שורה בקובץ.$
מתאים לסוף השורה בקובץ.\
זהו תו ירידה.
כדי לסנן טקסט, יש להשתמש בכלי סינון טקסט כמו awk. ניתן לחשוב על awk כשפת תכנות בעצמה. אך לצורך מדריך זה לשימוש ב־awk, נכסה אותו ככלי סינון בשורת פקודה.
תחביר הכללי של awk הוא:
awk 'script' filename
שבו 'script'
הוא סט של פקודות שניתן להבין על ידי awk והן מבוצעות על הקובץ, שם_קובץ.
הוא עובד על ידי קריאת שורה נתונה בקובץ, יצירת עותק של השורה, ואז ביצוע הסקריפט על השורה. זה חוזר על כל השורות בקובץ.
ה־'script'
כתוב בצורת '/pattern/ פעולה'
כאשר התבנית היא ביטוי רגולרי ו־הפעולה היא מה ש־awk תעשה כאשר היא מוצאת את התבנית הנתונה בשורה.
איך להשתמש בכלי סינון Awk ב־Linux
בדוגמאות הבאות, נתמקד בתוויות המטה שדיברנו עליהן לעיל תחת תכונות של awk.
הדפסת כל השורות מהקובץ באמצעות Awk
הדוגמה למטה מדפיסה את כל השורות בקובץ /etc/hosts מאחר ולא ניתן תבנית.
awk '//{print}'/etc/hosts

שימוש בתבניות Awk: התאמת שורות עם 'localhost' בקובץ
localhost
תופס את השורה שיש בה localhost בקובץ /etc/hosts
.
awk '/localhost/{print}' /etc/hosts

שימוש ב-Awk עם תבנית Wildcard (.)
(.)
יתאים למחרוזות המכילות loc, localhost, localnet בדוגמה למטה.
כלומר * l some_single_character c *.
awk '/l.c/{print}' /etc/hosts

שימוש ב-Awk עם (*) תו בתבנית
זה יתאים למחרוזות המכילות localhost, localnet, lines, capable, כמו בדוגמה למטה:
awk '/l*c/{print}' /etc/localhost

תבחינו גם ש-(*)
מנסה להביא לכם את ההתאמה הארוכה ביותר שניתן לזהות.
נסקור מקרה שמדגים זאת, נקח את הביטוי הרגיל t*t
שמשמעו התאמת מחרוזות שמתחילות באות t
ומסתיימות ב־t
בשורה שמתחת:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
תקבלו אפשרויות הבאות כאשר אתם משתמשים בתבנית /t*t/
:
this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
וה-* בתבנית /t*t/
מאפשר ל-Awk לבחור באפשרות האחרונה:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
שימוש ב-Awk עם קבוצת [תווים](עקביים)
לדוגמה, קבוצת [al1]
, כאן Awk יתאים לכל המחרוזות המכילות את התו a
או l
או 1
בשורה בקובץ /etc/hosts.
awk '/[al1]/{print}' /etc/hosts

הדוגמה הבאה מתאימה למחרוזות שמתחילות ב־K
או k
וממשיכות ב־T
:
# awk '/[Kk]T/{print}' /etc/hosts

ציון תווים בטווח
הבנת תווים עם awk:
[0-9]
אומר מספר יחיד[a-z]
אומר התאמה לאות קטנה יחידה[A-Z]
אומר התאמה לאות גדולה יחידה[a-zA-Z]
אומר התאמה לאות יחידה[a-zA-Z 0-9]
אומר התאמה לאות או מספר יחיד
בואו נסתכל על דוגמה מטה:
awk '/[0-9]/{print}' /etc/hosts

כל השורה מהקובץ /etc/hosts מכילה לפחות מספר יחיד [0-9]
בדוגמה לעיל.
שימוש ב־Awk עם (^) תו מטא
זה מתאים לכל השורות שמתחילות עם התבנית שסופקה כמו בדוגמה לעיל:
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts

שימוש ב־Awk עם ($) תו מטא
זה מתאים לכל השורות שמסתיימות עם התבנית שסופקה:
awk '/ab$/{print}' /etc/hosts awk '/ost$/{print}' /etc/hosts awk '/rs$/{print}' /etc/hosts

שימוש ב־Awk עם (\) תו בריחה
זה מאפשר לך לקחת את התו שאחריו כתו פשוט, כלומר לשקול אותו כפי שהוא.
בדוגמה לעיל, הפקודה הראשונה מדפיסה את כל השורות בקובץ, והפקודה השנייה לא מדפיסה כלום מכיוון שאני רוצה להתאים שורה שיש בה $25.00, אך לא נעשה שימוש בתו בריחה.
הפקודה השלישית נכונה מאחר ונעשה שימוש בתו בריחה כדי לקרוא את $ כפי שהוא.
awk '//{print}' deals.txt awk '/$25.00/{print}' deals.txt awk '/\$25.00/{print}' deals.txt

סיכום
זה לא הכל עם כלי הסינון בשורת הפקודה awk, הדוגמאות לעיל הן הפעולות הבסיסיות של awk. בחלקים הבאים, נמשיך להתקדם באופן שימושי של תכונות מורכבות של awk.
תודה על הקריאה ועל כל ההוספות או הבהרות, נא לפרסם תגובה בקטע ההערות.
Source:
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/