egrep: דוגמאות פקודה ב- GNU / Linux

egrep

grep זהו אחד הכלים הנפוצים ביותר בשורת הפקודה GNU / Linux. למרות היותו כלי פשוט מאוד, הוא מאפשר לבצע מספר רב של פעולות. הוא משמש במיוחד יחד עם צינורות, כדי להיות מסוגל לאתר נקודות ספציפיות בפלט של פקודה קודמת וכו '. אך יש גם כלי המכונה egrep המקביל להפעלת grep עם האפשרות -E.

ה- e מגיע מ- "regex מורחב", וזה מה שמפעיל את האפשרות -E ומה שיש לך ב- egrep כברירת מחדל מבלי להשתמש באפשרות זו. כלומר, אתה יכול להשתמש ב- ביטויים רגולריים מורחבים. במדריך זה לא אכנס להסביר מהם ביטויים רגולריים, כיצד ניתן להשתמש בהם ואילו סוגים קיימים ב- * nix. אני רק אראה דוגמאות מעשיות לכמה דברים שימושיים שתוכלו לעשות עם egrep ...

grep, egrep ו- fgrep דומים. למעשה, egrep שווה ערך ל- grep -E ו- fgrep שווה ערך ל- grep -F. כלומר, במקרה שנוגע לנו, הוא גם יפרש את הדפוסים כביטויים רגולריים.

אתה חפש שורה או מילה בקובץ אחד או יותר, כפי שקורה גם עם grep. לדוגמא, נניח שתרצה לחפש את המילה ubuntu בקובץ שנקרא snap.txt וגם בכל קבצי ה- .txt בספריה הנוכחית:

egrep ubuntu snap.txt

egrep ubuntu *.txt

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

egrep -r "hola mundo" *

עד כה חיפשו מילים או מחרוזות מדויקות, כלומר תוך התחשבות באותיות קטנות וקטנות (תלויות רישיות), אך אם ברצונך לעשות זאת במצב שאיננו רגיש לאותיות רישיות, לא משנה אם הם באותיות רישיות או קטנות, אתה יכול להשתמש בדברים הבאים (אם אתה מוסיף w הוא ימצא רק התאמות שלמות):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

הראה, לא את המקריות, אלא את שמות הקבצים שבהם נמצאו ההתאמות הללו:

egrep -l hola *.txt

הראה רק את התבנית או המילה חיפש במסמך:

egrep -o printf hola.c

זכרו שתוכלו להשתמש בכל האפשרויות שתוכלו לדמיין. ניתן לשלב בין כמה מהאפשרויות שנראו בעבר, או להשלים אותן עם אפשרויות אחרות כגון -A n ו- -B n, כאשר n מספר השורות שברצונך להציג לפני (לפני) ואחרי (אחרי) של המשחק או שניהם בו זמנית (C), כך שתוכלו לראות מה מקיף את המשחק:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

הדחק שורות המכילות התאמה ומציגות רק את אלו שאינן תואמות:

egrep -v "dos" números.doc

או אם אתה מעדיף, אתה יכול להשתמש מספר מילים או התאמות עם -e. לדוגמה:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

אם אתה משתמש -c יכול לספור רק את מספר ההתאמות, או הפוך אותו עם -v כדי להציג את מספר השורות הלא תואמות. לדוגמה:

egrep -c "include" main.c

egrep -v -c "include" main.c

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

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

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

* תיקון הפקודה הבאה: הודות לתגובת הקורא מנואל אלקוקר הצלחתי לשנות את הפקודה הבאה מכיוון שהייתה שגיאה.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

אבל אם אתה תוהה לגבי ההבדל עם grep, הנה דוגמה שתבהיר ... במקרה של שימוש ב- grep ללא -E אתה צריך להשתמש ב- רצפי בריחה כך שהוא יפרש את התווים המיוחדים ככאלה, אחרת הוא יפרש את הדפוס ככזה מבלי לקחת אותם בחשבון. מצד שני, עם egrep או grep -E זה ייקח אותם בחשבון. לדוגמה:
grep '^no\(fork\|group\)' /etc/group

זה יהיה שווה ערך ל:

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

כלומר, זה יחפש את השורות התואמות המתחילות ב- nofork או nogroup. אבל אם השתמשת בביטוי הראשון של grep ללא רצפי הבריחה, מה שהוא יעשה זה לחפש דפוס הבטון לא (מזלג | קבוצה):

grep 'no(fork|group)' /etc/group

אתה יכול גם לחפש טווחים אלפאנומריים, או ערכים ספציפיים, כגון איתור כתובות IP מסוימות:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

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

egrep -i '^(printf|scanf)' hola.c

אתה יכול אפילו לאתר אותיות רישיות, אותיות קטנות, אלפביתיות בלבד, או אלפאנומריות וכו '., תוך שימוש בביטויים אחרים כגון: [: אלנום:], [: אלפא:], [: ספרה:], [: תחתון:], [: הדפס:], [: נקודה:], [: רווח:], [: עליון:] וכו '. לדוגמה, כדי לחפש אותיות רישיות:
egrep [[:upper:]] diccioario

אני מקווה שזה יעזור לך ... בקרוב אסביר ביטויים קבועים במאמר המוקדש במיוחד לו ...


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   מנואל אלקוקר דיג'ו

    צָהֳרַיִים טוֹבִים.

    כמה הערות ...

    אתה מסביר את הפקודה 'egrep' אבל לא שם את ההבדל בין 'egrep' ל- 'grep', שאמור להיות מה שיש כאן.

    לדוגמה:
    עם grep: ip -4 a | grep '[0-9] \ +'
    עם egrep: ip -4 a | egrep '[0-9] +'

    אהה, וזה לא בסדר, 'egrep "שלום. * ביי" example.txt'; ההצלחה כאן מתרחשת כאשר יש בקובץ שורה המכילה את המחרוזת 'שלום' ואחריו כל דבר ואחריו 'להתראות', השורה יכולה באמת להתחיל ולסיים בכל דבר.

    זה מה שהמאמר אומר:
    egrep '^ שלום. * ביי $' example.txt

    וכל האפשרויות, או כמעט כולן (אני לא מפסיק לבדוק את זה), הן אפשרויות של 'grep' ולא של 'egrep' באופן בלעדי.

    בברכה.

    1.    יצחק דיג'ו

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

      1.    מנואל אלקוקר דיג'ו

        שלום שוב אייזק.

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

        הקדשת מאמר להסבר ביטויים רגולריים מורחבים נראית לי נועזת, בין היתר משום שיש אתרים כאלה שאינם מפרסמים ועושים עבודת הסברה חשובה מאוד עבור קהילת הגנו: https://www.rexegg.com/

        אני לא כותב כאן לטרול, הכוונה שלי עם כל זה היא שאם מישהו קורא ערך זה כדי לראות מה 'egrep' או 'grep' עושה, אנא עיין במקורות אחרים, ערך זה לא יכול להיות התייחסות לשום דבר, זה מסביר מעט, רע , מציע מידע מיותר ויכול להיות מבלבל, במיוחד עבור מי שאין לו ידע על GNU ועל הכלים החזקים שהוא מציע.

        לבסוף, הוספת ותיקנת את הבאג שציינתי לאחר התגובה הראשונה שלי (^ $). כמו באתרים אחרים, היית צריך לצטט את האדם שביצע את התיקון, או לפחות לומר שזה תיקון, שהוא חלק מבסיס ה- GNU, אותו בסיס איתו נפתח ובלוג זה נפתח. אָבֵד.

        ברכה.

        1.    יצחק דיג'ו

          תודה על נקודת המבט שלך.

  2.   fsafs דיג'ו

    פ פ פ פ