grep
התוכנה העיקרית שבה נשתמש כדי לעבוד עם ביטויים רגולריים היא החבר הישן שלנו, grep. השם "grep" נגזר למעשה מהביטוי "הדפס ביטוי רגולרי גלובלי", כך שנוכל לראות את זה grep יש קשר לביטויים רגולריים. בעצם, grep מחפש בקבצי טקסט את טקסט המופע התואם לביטוי רגולרי שצוין ומוציא כל שורה המכילה התאמה לפלט סטנדרטי.
עד כה, השתמשנו grep עם מחרוזות קבועות, כך:
[me@linuxbox ~]$ ls /usr/bin | grep zip
[me@linuxbox ~]$ ls /usr/bin | grep zip
זה יפרט את כל הקבצים ב- / usr / bin ספרייה ששמותיה מכילים את המחרוזת המשנה "zip".
אל האני grep התוכנית מקבלת אפשרויות וארגומנטים בדרך זו:
grep [אפשרויות] regex [קוֹבֶץ...]
איפה regex הוא ביטוי רגולרי.
להלן רשימה של הנפוצים בשימוש grep אפשרויות:
טבלה 19-1: אפשרויות grep
תיאור אפשרות
תיאור אפשרות
-i התעלם מהמקרה. אין להבחין בין אותיות גדולות וקטנות. ניתן גם לפרט --התעלם ממקרה.
-v הפוך התאמה. בדרך כלל, grep מדפיס שורות המכילות התאמה.
אפשרות זו גורמת grep כדי להדפיס כל שורה שאינה מכילה התאמה. ניתן גם לפרט --היפוך-התאמה.
-c הדפס את מספר ההתאמות (או אי-התאמות אם -v אפשרות מצוינת גם) במקום הקווים עצמם. ניתן גם לפרט --לספור.
-l הדפס את השם של כל קובץ המכיל התאמה במקום השורות עצמן. ניתן גם לפרט --קבצים-עם-התאמות.
-L כמו האפשרות -l, אבל הדפס רק את שמות הקבצים שאינם מכילים התאמות. ניתן גם לציין --files-without- match.
-n הקדימו של כל שורה תואמת עם מספר השורה בתוך הקובץ. ניתן גם לציין --שורה-מספר.
-h עבור חיפושים מרובי קבצים, דחק את הפלט של שמות הקבצים. ניתן גם לפרט --אין שם קובץ.
על מנת לחקור בצורה מלאה יותר grep, בואו ניצור כמה קבצי טקסט לחיפוש:
grep
[me@linuxbox ~]$ ls /bin > dirlist-bin.txt [me@linuxbox ~]$ ls /usr/bin > dirlist-usr-bin.txt [me@linuxbox ~]$ ls /sbin > dirlist-sbin.txt [me@linuxbox ~]$ ls /usr/sbin > dirlist-usr-sbin.txt [me@linuxbox ~]$ ls dirlist*.txt
dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt
[me@linuxbox ~]$ ls /bin > dirlist-bin.txt [me@linuxbox ~]$ ls /usr/bin > dirlist-usr-bin.txt [me@linuxbox ~]$ ls /sbin > dirlist-sbin.txt [me@linuxbox ~]$ ls /usr/sbin > dirlist-usr-sbin.txt [me@linuxbox ~]$ ls dirlist*.txt
dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt
אנו יכולים לבצע חיפוש פשוט ברשימת הקבצים שלנו כך:
[me@linuxbox ~]$ grep bzip dirlist*.txt
dirlist-bin.txt:bzip2 dirlist-bin.txt:bzip2recover
[me@linuxbox ~]$ grep bzip dirlist*.txt
dirlist-bin.txt:bzip2 dirlist-bin.txt:bzip2recover
בדוגמה זו, grep מחפש את המחרוזת בכל הקבצים הרשומים bzip ומוצא שתי התאמות, שתיהן בקובץ dirlist-bin.txt. אם היינו מעוניינים רק ברשימת הקבצים שהכילו התאמות ולא ההתאמות עצמן, נוכל לציין את -l אפשרות:
[me@linuxbox ~]$ grep -l bzip dirlist*.txt
dirlist-bin.txt
[me@linuxbox ~]$ grep -l bzip dirlist*.txt
dirlist-bin.txt
לעומת זאת, אם נרצה לראות רק רשימה של הקבצים שלא מכילים התאמה, נוכל לעשות זאת:
[me@linuxbox ~]$ grep -L bzip dirlist*.txt
dirlist-sbin.txt dirlist-usr-bin.txt dirlist-usr-sbin.txt
[me@linuxbox ~]$ grep -L bzip dirlist*.txt
dirlist-sbin.txt dirlist-usr-bin.txt dirlist-usr-sbin.txt