הקדמה
פקודת grep
היא אחת מהפקודות המועילות ביותר בסביבת טרמינל של Linux. שם הפקודה grep
מסמל "global regular expression print". זה אומר שתוכל להשתמש ב־grep
כדי לבדוק האם הקלט שהוא מקבל תואם תבנית מסוימת. התוכנית הזו שמתחזית נראית פשוטה מאוד היא חזקה ביותר; יכולתה למיין קלט על פי כללים מורכבים הופכת אותה לקישור פופולרי בשרשראות הפקודות הרבות.
במדריך זה, תלמד על אפשרויות הפקודה grep
, ואז תתעמק בשימוש בביטויים רגולריים כדי לבצע חיפושים מתקדמים יותר.
דרישות מוקדמות
כדי להמשיך עם המדריך הזה, תצטרך גישה למחשב שרץ במערכת הפעלה מבוססת Linux. זה יכול להיות או שרת פרטי וירטואלי שהתחברת אליו באמצעות SSH או המחשב המקומי שלך. שים לב שהמדריך זה עבר אימות בשימוש בשרת Linux הרץ ב־Ubuntu 20.04, אך הדוגמאות שניתנות אמורות לעבוד על מחשב הרץ בגרסת כל מפצל Linux שהיא.
אם אתה מתכנן להשתמש בשרת רחוק למעקב אחרי המדריך הזה, אנו ממליצים לך לסיים תחילה את מדריך התקנת השרת הראשוני שלנו. לעשות זאת יכול להכין לך סביבת שרת מאובטחת — כולל משתמש לא-root עם הרשאות sudo
וגישה לגיבוי של UFW — שתוכל להשתמש בה כדי לבנות את הכישורים שלך ב-Linux.
שימוש בסיסי
במדריך זה, תשתמש ב-grep
כדי לחפש ברישיון ה-רשיון כללי ציבורי של GNU גרסה 3 מילים וביטויים שונים.
אם אתה במערכת Ubuntu, תוכל למצוא את הקובץ בתיקיית /usr/share/common-licenses
. העתק אותו אל תיקיית הבית שלך:
אם אתה במערכת אחרת, השתמש בפקודת curl
כדי להוריד עותק:
תשתמש גם בקובץ רשיון BSD במדריך זה. על Linux, תוכל להעתיק את זה אל תיקיית הבית שלך עם הפקודה הבאה:
אם אתה במערכת אחרת, צור את הקובץ עם הפקודה הבאה:
עכשיו שיש לך את הקבצים, תוכל להתחיל לעבוד עם grep
.
בצורה הבסיסית ביותר, תשתמש ב-grep
כדי להתאים רקע לתבניות במסמך טקסט. זה אומר שאם תעביר ל-grep
מילה לחיפוש, הוא ידפיס כל שורה בקובץ המכילה את המילה הזו.
הרץ את הפקודה הבאה כדי להשתמש ב־grep
לחיפוש כל שורה שמכילה את המילה GNU
:
הפרמטר הראשון, GNU
, הוא התבנית שאתה מחפש, בעוד הפרמטר השני, GPL-3
, הוא קובץ הקלט שברצונך לחפש בו.
הפלט התוצאה יהיה כל שורה המכילה את טקסט התבנית:
Output GNU GENERAL PUBLIC LICENSE
The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
Developers that use the GNU GPL protect your rights with two steps:
"This License" refers to version 3 of the GNU General Public License.
13. Use with the GNU Affero General Public License.
under version 3 of the GNU Affero General Public License into a single
...
...
במספר מערכות, יופגן הטקסט שחיפשת בפלט.
אפשרויות נפוצות
בצורת ברירת מחדל, grep
תחפש את התבנית המסוימת בדיוק בקובץ הקלט ותחזיר את השורות שהיא מוצאת. באפשרותך להפוך את ההתנהגות הזו ליותר שימושית על ידי הוספת כמה דגלים אופציונליים ל־grep
.
אם ברצונך ש־grep
יתעלם מ"תיקוי" הפרמטר המחפש שלך ויחפש גם גרסאות באותיות גדולות וקטנות, תוכל לציין את האפשרות -i
או --ignore-case
.
חפש את כל מופע של המילה license
(באותיות גדולות, קטנות, או מעורבות) באותו הקובץ כמו לפני עם הפקודה הבאה:
התוצאות כוללות: LICENSE
, license
, ו־License
:
Output GNU GENERAL PUBLIC LICENSE
of this license document, but changing it is not allowed.
The GNU General Public License is a free, copyleft license for
The licenses for most software and other practical works are designed
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price. Our General Public Licenses are designed to make sure that you
(1) assert copyright on the software, and (2) offer you this License
"This License" refers to version 3 of the GNU General Public License.
"The Program" refers to any copyrightable work licensed under this
...
...
אם היה קיים מופע כזה עם LiCeNsE
, הוא היה נחזר גם כן.
אם ברצונך למצוא את כל השורות שלא מכילות דפוס מסוים, תוכל להשתמש באפשרות -v
או באפשרות --invert-match
.
חפש את כל השורות שאינן מכילות את המילה the
ברישיון BSD עם הפקודה הבאה:
תקבל את הפלט הבא:
OutputAll rights reserved.
Redistribution and use in source and binary forms, with or without
are met:
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...
מכיוון שלא ציינת את אפשרות "התעלמות מאותיות רישיות", הפריטים האחרונים שוחזרו כאשר המילה the
לא הייתה בהם.
לעיתים קרובות נוח לדעת את מספר השורה בו ההתאמות מתרחשות. תוכל לעשות זאת על ידי השימוש באפשרות -n
או --line-number
. הפעל מחדש את הדוגמה הקודמת עם האופציה הזו מוסיפה:
זה יחזיר את הטקסט הבא:
Output2:All rights reserved.
3:
4:Redistribution and use in source and binary forms, with or without
6:are met:
13: may be used to endorse or promote products derived from this software
14: without specific prior written permission.
15:
16:THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17:ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...
כעת תוכל להפנות למספר השורה אם ברצונך לבצע שינויים בכל שורה שאינה מכילה את the
. זה מיועד במיוחד כאשר אתה עובד עם קוד מקור.
ביטויים רגולריים
במבוא, למדת ש־grep
מסמנת "הדפסת ביטויים רגולריים גלובלית". "ביטוי רגולרי" הוא מחרוזת טקסט המתארת דפוס חיפוש מסוים.
יישומים שונים ושפות תכנות מיישמים ביטויים רגולריים בצורה מעט שונה. במדריך זה תגלה רק תת־קבוצה קטנה מהדרך שבה grep
מתארת את הדפוסים שלו.
התאמות ליטרליות
בדוגמאות הקודמות במדריך זה, כאשר חיפשת למילים GNU
ו־the
, אתה בעצם מחפש עבור ביטויים רגולריים בסיסיים שמתאימים למחרוזת מדויקת של תווים GNU
ו־the
. תבניות שמציין בדיוק את התווים שיש להתאים נקראות "ליטרליות" מכיוון שהן מתאימות לתבנית באופן לטרלי, תו אחר תו.
מועיל לחשוב על אלו כמתאימים למחרוזת של תווים במקום מתאימים למילה. זה יהפוך להבדיל חשוב יותר ככל שתלמד תבניות מורכבות יותר.
כל התווים האלפביתיים והמספריים (וגם תווים מסוימים אחרים) מתאימים ליטרלית אלא אם כן מודיפים על ידי מנגנוני ביטויים אחרים.
התאמות לעוגנים
עוגנים הם תווים מיוחדים שמציינים איפה בשורה חייבת להתרחש ההתאמה כדי שתהיה תקפה.
לדוגמה, באמצעות עוגנים, תוכל לציין כי אתה רוצה רק לדעת על השורות שמתאימות ל־GNU
בתחילת השורה בדיוק. כדי לעשות זאת, תוכל להשתמש בעוגן ^
לפני המחרוזת הליטרלית.
הריץ את הפקודה הבאה כדי לחפש את הקובץ GPL-3
ולמצוא שורות בהן מופיעה המילה GNU
בתחילתן של השורה:
פקודה זו תחזיר את השורות הבאות:
OutputGNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published
באופן דומה, ניתן להשתמש בעוגן $
בסוף תבנית כדי לציין כי התאמה תהיה תקפה רק אם היא מופיעה בסוף השורה:
פקודה זו תתאים לכל שורה שמסתיימת במילה and
בקובץ GPL-3
:
תקבלו את הפלט הבא:
Outputthat there is no warranty for this free software. For both users' and
The precise terms and conditions for copying, distribution and
License. Each licensee is addressed as "you". "Licensees" and
receive it, in any medium, provided that you conspicuously and
alternative is allowed only occasionally and noncommercially, and
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
provisionally, unless and until the copyright holder explicitly and
receives a license from the original licensors, to run, modify and
make, use, sell, offer for sale, import and otherwise run, modify and
התאמת תו כלשהו
התו הנקודה (.) משמש בביטויים רגולריים כדי לציין כי כל תו יכול להופיע במיקום המצוין:
לדוגמה, כדי לתאם כל דבר בקובץ GPL-3
שמכיל שני תווים ואז את המחרוזת cept
, יש להשתמש בתבנית הבאה:
פקודה זו תחזיר את הפלט הבא:
Outputuse, which is precisely where it is most unacceptable. Therefore, we
infringement under applicable copyright law, except executing it on a
tells the user that there is no warranty for the work (except to the
License by making exceptions from one or more of its conditions.
form of a separately written license, or stated as exceptions;
You may not propagate or modify a covered work except as expressly
9. Acceptance Not Required for Having Copies.
...
...
הפלט מכיל אינסטנציות של accept
ו-except
והשינויים שלהן. התבנית גם הייתה מתאימה ל-z2cept
אם הייתה מופיעה כך גם.
ביטויי סוגריים
על ידי שימוש בסוגריים מרובעים (\[
ו־\]
), ניתן לציין כי התו במיקום זה יכול להיות כל תו אחד הנמצא בתוך קבוצת הסוגריים.
לדוגמה, כדי למצוא את השורות המכילות את too
או two
, תציין את הופעות אלו בצורה קצרה באמצעות התבנית הבאה:
הפלט מציין כי שני השונויות קיימות בקובץ:
Outputyour programs, too.
freedoms that you received. You must make sure that they, too, receive
Developers that use the GNU GPL protect your rights with two steps:
a computer network, with no transfer of a copy, is not conveying.
System Libraries, or general-purpose tools or generally available free
Corresponding Source from a network server at no charge.
...
...
הסימון באמצעות סוגריים נותן לך אפשרויות מעניינות. תוכל להתאים את התבנית כדי להתאים לכל דבר למעט התווים בתוך קבוצת הסוגריים על ידי התחלת רשימת התווים בתוך הסוגריים עם תו ^
.
דוגמה זו דומה לתבנית .ode
, אך לא תתאים לתבנית code
:
להלן הפלט שתקבלו:
Output 1. Source Code.
model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:
שים לב כי בשורה השנייה שהוחזרה, קיימת בעצם המילה code
. זה לא כישלון של הביטוי הרגיל או של grep. במקום זאת, השורה חזרה מאחר ובמקום קודם בשורה, התבנית mode
, הנמצאת במילה model
, נמצאה. השורה חזרה מאחר והיה קיים אינסטנס שתואם את התבנית.
תכונה נוספת שימושית של סוגריים היא שתוכל לציין טווח של תווים במקום להקליד כל תו נתון בנפרד.
כלומר, אם ברצונך למצוא כל שורה שמתחילה באות גדולה, תוכל להשתמש בתבנית הבאה:
הנה הפלט שהביטוי הזה מחזיר:
OutputGNU General Public License for most of our software; it applies also to
States should not allow patents to restrict development and use of
License. Each licensee is addressed as "you". "Licensees" and
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
System Libraries, or general-purpose tools or generally available free
Source.
User Product is transferred to the recipient in perpetuity or for a
...
...
כתוצאה מבעיות מיושנות במיון, לעיתים תהיה יותר מדויק להשתמש במחלקות תווים POSIX במקום טווחי תווים כמו שהשתמשת בהם לאחרונה.
כדי לדון בכל מחלקת תווים POSIX יהיה מעבר לטווח של מדריך זה, אך דוגמה שתגרום לנתונים להיות כמו בדוגמה הקודמת היא שימוש במחלקת התווים \[:upper:\]
בתוך בורר סוגריים:
הפלט יהיה זהה לקודם.
חזור על הדפוס פעמים אפס או יותר
לבסוף, אחד מהתווים המטא-נפוצים ביותר הוא הכוכבית, או *
, שמשמעו "חזור על התו או הביטוי הקודם אפס או יותר פעמים".
כדי למצוא כל שורה בקובץ GPL-3 שמכילה פתיחה וסגירה של סוגריים, עם אותיות בודדות ורווחים ביניהם, השתמש בביטוי הבא:
תקבל את הפלט הבא:
Output Copyright (C) 2007 Free Software Foundation, Inc.
distribution (with or without modification), making available to the
than the work as a whole, that (a) is included in the normal form of
Component, and (b) serves only to enable use of the work with that
(if any) on which the executable work runs, or a compiler used to
(including a physical distribution medium), accompanied by the
(including a physical distribution medium), accompanied by a
place (gratis or for a charge), and offer equivalent access to the
...
...
עד כה השתמשת בנקודות, כוכביות ותווים אחרים בביטויים שלך, אך לעיתים תצטרך לחפש את התווים האלה באופן מפורש.
שחרור תווים מטא
ישנם רגעים בהם תצטרך לחפש לסימן נקודה ממשי או לסימן פתיחתי ממש, במיוחד כאשר אתה עובד עם קוד מקור או קבצי הגדרות. מכיוון שתווים אלה יש להם משמעות מיוחדת בביטויים רגולריים, עליך ל"ברח" את תווים אלה כדי להגיד ל־grep
שאינך רוצה להשתמש במשמעות המיוחדת שלהם במקרה זה.
אתה מבריח תווים באמצעות שימוש בתו החזרה (\
) לפני התו שבדרך כלל יש לו משמעות מיוחדת.
לדוגמה, כדי למצוא כל שורה שמתחילה באות גדולה ומסתיימת בנקודה, השתמש בביטוי הבא שמבריח את הנקודה הסופית כך שהיא מייצגת נקודה ממשית במקום משמעות "כל תו":
זהו הפלט שתראה:
OutputSource.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.
עכשיו בואו נסתכל על אפשרויות ביטויים רגולריים נוספות.
ביטויים רגולריים מורחבים
פקודת grep
תומכת בשפה של ביטויים רגולריים מורחבת יותר על ידי שימוש בדגל -E
או על ידי קריאה לפקודת egrep
במקום grep
.
אפשרויות אלו פותחות את היכולות של "ביטויים רגולריים מורחבים". ביטויים רגולריים מורחבים כוללים את כל המתווים הבסיסיים, יחד עם מתווים נוספים כדי להביע התאמות מורכבות יותר.
קיבוץ
אחת היכולות המועילות ביותר שפתיחת הביטויים הרגולריים המורחבת פותחת היא היכולת לקבוץ ביטויים יחד כדי לנהל אותם או להפנות אליהם כיחידה אחת.
כדי לקבץ ביטויים יחד, עליך לעטוף אותם בסוגריים. אם ברצונך להשתמש בסוגריים מבלי להשתמש בביטויים רגולריים מורחבים, ניתן להתיר אותם באמצעות סימן החזרה אחורה כדי להפעיל את פונקציונליות זו. זה אומר ששלושת הביטויים הבאים זהים פונקציונלית:
אלטרנטיבה
בדומה לאיך שביטויי סוגריים יכולים לציין בחירות אפשריות שונות להתאמות תווים יחידים, אלטרנטיבה מאפשרת לך לציין התאמות אלטרנטיביות למחרוזות או לסטי ביטויים.
כדי לציין אלטרנטיבה, עליך להשתמש בתו הצינור |
. נהוג להשתמש בסוגריים לציון שאחד משני או יותר מבחרים צפויים כמחזור.
הבא ימצא את GPL
או רישיון ציבורי כללי
בטקסט:
הפלט נראה כך:
Output The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price. Our General Public Licenses are designed to make sure that you
Developers that use the GNU GPL protect your rights with two steps:
For the developers' and authors' protection, the GPL clearly explains
authors' sake, the GPL requires that modified versions be marked as
have designed this version of the GPL to prohibit the practice for those
...
...
אלטרנטיבה יכולה לבחור בין יותר משתי בחירות על ידי הוספת בחירות נוספות בתוך קבוצת הבחירה מופרדות בתו צינור (|
).
כמותיים
כמו המטא-תו *
שתואם את התו או סט התווים הקודם אפס או יותר פעמים, יש מטא-תוים אחרים זמינים בביטויים רגולריים מורחבים שמציינים את מספר ההופעות.
כדי להתאים לתו פעם אפס או פעם אחת, ניתן להשתמש בתו ?
. זה עושה את התו או סט התווים שהקדים אופציונלי, בעצם.
הבא מתאים ל- copyright
ול- right
על ידי שימוש בתת-קבוצה אופציונלית של copy
:
תקבלו פלט זה:
Output Copyright (C) 2007 Free Software Foundation, Inc.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
"Copyright" also means copyright-like laws that apply to other kinds of
...
התו +
מתאים לביטוי פעם אחת או יותר. זה דומה בגדר כמעט למטא-תו *
, אך עם התו +
, הביטוי חייב להתאים לפחות פעם אחת.
הביטוי הבא מתאים למחרוזת free
פלוס תווים שאינם תווי רווח:
תראו פלט זה:
Output The GNU General Public License is a free, copyleft license for
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
When we speak of free software, we are referring to freedom, not
have the freedom to distribute copies of free software (and charge for
you modify it: responsibilities to respect the freedom of others.
freedomss that you received. You must make sure that they, too, receive
protecting users' freedom to change the software. The systematic
of the GPL, as needed to protect the freedom of users.
patents cannot be used to render the program non-free.
ציון חוזר
לציין את מספר הפעמים שבהן התאמה מחדלית, השתמש בתווים הסוגרים ({
ו־}
). תווים אלו מאפשרים לך לציין מספר מדויק, טווח או גבול עליון או תחתון לכמות הפעמים שבהן הביטוי יכול להתאים.
השתמש בביטוי הבא כדי למצוא את כל השורות בקובץ GPL-3
שמכילות שלושה תווי ניקוד:
כל שורה שתוחזר תכיל מילה עם שלושה תווי ניקוד:
Outputchanged, so that their problems will not be attributed erroneously to
authors of previous versions.
receive it, in any medium, provided that you conspicuously and
give under the previous paragraph, plus a right to possession of the
covered work so as to satisfy simultaneously your obligations under this
כדי להתאים למילים שיש להן בין 16 ל־20 תווים, השתמש בביטוי הבא:
כאן הואפט פלט הפקודה:
Output certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
c) Prohibiting misrepresentation of the origin of that material, or
רק שורות המכילות מילים באורך המתאים מוצגות.
מסקנה
grep
שימושי למציאת תבניות בתוך קבצים או בתוך היררכיית מערכת הקבצים, לכן שווה להוציא זמן ולהתרגל לאפשרויותיו ולתחבירתו.
ביטויים רגולריים הם אפילו יותר גמישים, וניתן להשתמש בהם עם הרבה תוכנות פופולריות. לדוגמה, רבות מערכות העריכה של טקסט מיישמות ביטויים רגולריים לחיפוש והחלפת טקסט.
בנוסף, רוב שפות התכנות המודרניות משתמשות בביטויים רגולריים כדי לבצע פעולות על קטעי נתונים מסוימים. לאחר שתבין ביטויים רגולריים, תוכל להעביר את הידע הזה למגוון משימות מחשביות נפוצות, מביצוע חיפושים מתקדמים בעורך הטקסט שלך עד לאימות קלט משתמש.