פקודת Grep ב-Linux/UNIX

מהו Grep

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

פקודת Grep ב-Linux

ניתן להשתמש בפקודת Grep כדי למצוא או לחפש ביטוי רגולרי או מחרוזת בקובץ טקסט. כדי לדגים זאת, ניצור קובץ טקסט בשם welcome.txt ונוסיף תוכן כפי שמוצג.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

נהדר! עכשיו אנו מוכנים לבצע כמה פקודות Grep ולשנות את הפלט כך שנקבל את התוצאות הרצויות. כדי לחפש מחרוזת בקובץ, הפעילו את הפקודה הבאה תחביר

$ grep "string" file name

או

$ filename grep "string"

דוגמה:

$ grep "Linux" welcome.txt

פלט כפי שניתן לראות, Grep לא רק חיפשה והתאימה למחרוזת "Linux", אלא גם הדפיסה את השורות שבהן המחרוזת מופיעה. אם הקובץ נמצא בנתיב שונה, יש לציין את נתיב הקובץ כפי שמוצג למטה.

$ grep "string" /path/to/file

צביעת תוצאות Grep באמצעות האפשרות –color

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

$ grep --color "free and opensource" welcome.txt 

פלט

חיפוש למחרוזת באופן רקורסיבי בכל הספריות

אם ברצונך לחפש מחרוזת בספריית הנוכחית שלך ובכל התת־ספריות האחרות, חפש באמצעות הדגל - r כמו שמוצג

$ grep -r "string-name" *

לדוגמה

$ grep -r "linux" *

פלט

התעלמות מרגישות האותיות

בדוגמה למעלה, תוצאות החיפוש שלנו נתנו לנו את מה שרצינו מכיוון שהמחרוזת "Linux" צויינה באותיות רישיות וגם קיימת בקובץ באותיות רישיות. עכשיו בואו ננסה לחפש את המחרוזת באותיות קטנות.

$ grep "linux" file name

שום דבר מהפלט, נכון? זה מכיוון שפקודת ה-Grep לא הצליחה למצוא ולהתאים את המחרוזת "linux" מאחר והאות הראשונה היא אות קטנה. כדי להתעלם מרגישות האותיות, יש להשתמש בדגל -i ולבצע את הפקודה הבאה

$ grep -i "linux" welcome.txt

פלט מדהים, איננו? ה--i נהוג לרוב להציג מחרוזות ללא התייחסות לרגישות האותיות שלהן.

לספור את השורות בהן מתאימות מחרוזות בעזרת האופציה -c

כדי לספור את מספר השורות הכולל שבהן מופיע או מתגוררת התבנית של המחרוזת, יש לבצע את הפקודה הבאה

$ grep -c "Linux" welcome.txt

פלט

שימוש ב-Grep להיפוך הפלט

כדי להפוך את הפלט של Grep, השתמש בדגל -v. אפשרות ה--v מציינת ל-grep להדפיס את כל השורות שאינן מכילות או מתאימות לביטוי. האפשרות -v מורידה ל-grep להפוך את הפלט שלו, שכן במקום להדפיס שורות שמתאימות, הוא יעשה את ההפך וידפיס את כל השורות שלא מתאימות לביטוי. חוזרים לקובץ שלנו, בואו נציג את מספרי השורות כפי שמוצג. לחץ ESC בעורך Vim, הקלד : ואז

 set nu

לחץ Enter פלט כעת, כדי להציג את השורות שאינן מכילות את המחרוזת "Linux", הרץ

$ grep -v "Linux" welcome.txt

פלט כפי שניתן לראות, grep הציג את השורות שאינן מכילות את תבנית החיפוש.

ממספר את השורות שמכילות את תבנית החיפוש באמצעות האפשרות -n

כדי למספר את השורות שבהן המחרוזת מתאימה, השתמש באפשרות -n כפי שמוצג

$ grep -n "Linux" welcome.txt

פלט

חפש את המילה המתאימה בדיוק באמצעות האפשרות -w

עבור העברת הדגל -w תחפש את השורה המכילה את המילה המתאימה בדיוק כפי שמוצג

$ grep -w "opensource" welcome.txt

פלט אך, אם תנסה

$ grep -w "open" welcome.txt

לא יוחזרו תוצאות מכיוון שאנו לא מחפשים תבנית אלא מילה בדיוק!

שימוש בצינורות עם grep

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

$ dpkg -L | grep "package-name"

לדוגמה, כדי לגלות האם OpenSSH מותקן במערכתך, העבר את הפקודה dpkg -l ל- grep כפי שמוצג

$ dpkg -L | grep -i "openssh"

פלט

הצגת מספר השורות לפני או אחרי תבנית חיפוש באמצעות קווים אנכיים

ניתן להשתמש בפקודות -A או -B כדי להציג את מספר השורות שלפני או אחרי מחרוזת החיפוש. הדגמה משתמשת בדגמים הבאים: הדגמה הראשונה מציגה את השורה המכילה את המחרוזת וארבע שורות טקסט אחריה בפקודת ifconfig באמצעות הדגמה

$ ifconfig | grep -A 4 ens3

ens. פלט להפך, בדוגמה הבאה, שימוש בדגם -B יציג את השורה המכילה את מחרוזת החיפוש ושלוש שורות טקסט לפני ether בפקודת ifconfig. פלט

$ ifconfig | grep -B 4 ether

שימוש ב- grep עם REGEX – ביטויים רגולריים

המונח REGEX הוא ראשי תיבות לביטוי רגולרי. ביטוי רגולרי הוא סדרה של תווים המשמשת להתאים לתבנית. להלן דוגמאות:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

דוגמה כדי להדפיס שורות שמתחילות בתו מסוים, התחברות התחברות היא;

grep ^character file_name

לדוגמה, כדי להציג את השורות שמתחילות באות "ד" בקובץ welcome.txt שלנו, נפעיל

$ grep ^d welcome.txt 

פלט כדי להציג שורות שמסתיימות באות 'x' נפעיל

$ grep x$ welcome.txt

פלט

קבלת עזרה עם אפשרויות Grep נוספות

אם תרצה ללמוד עוד על שימוש בפקודת Grep, הפעל את הפקודה למטה כדי לקבל הצצה מהירה של דגלים או אפשרויות אחרות שאתה יכול להשתמש יחד עם הפקודה.

$ grep --help

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

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix