זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/unix1/lessons/relab
זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/unix1/lessons/relab
הי ינון,
האם בפלט הצפוי בשני החלקים כולל את השורות:
The number 0
The number 1
בחלק הבינארי
ואת:
the number 50 and also the number 7a
the numbers: 10,20,30
בחלק ההקסא?
זאת תמיד שאלה קשה - מה באמת אנחנו רוצים כשאנחנו כותבים ביטוי רגולארי. הרבה פעמים רק תוך כדי כתיבת הביטויים אנחנו מבינים ששורה מסוימת צריכה להיות בפלט או לא צריכה, ולכן השארתי את השאלה הזאת קצת דו-משמעית.
שווה לנסות לפתור את זה בשתי הגישות, כלומר למצוא את הביטוי הרגולרי שיכלול את השורות האלה בפלט, ואחר כך לחפש את הביטוי הרגולרי שיוותר עליהן
היי ינון,
לגבי תרגול " הציגו מתוך הפלט של ls -l
רק את השורות שאורכן מעל 50 תווים"
אני יושב ושובר את הראש איך אני יכול להרכיב את השורה הנכונה בשביל למצוא את השורות שאורכן מעלה ל50 תווים, יש אפשרות לקבל כיוון בנושא?
אז אתה יודע שאנחנו מדברים על ביטויים רגולאריים - ולכן צריך למצוא ביטוי רגולארי שימצא ״קלטים באורך 50 תווים או יותר״.
אפשר להתחיל בקטן-
יודע לכתוב ביטוי רגולארי שמוצא קלט באורך תו אחד או יותר?
שני תווים או יותר?
חמישה תווים או יותר?
השאלה האם בתרגול אתה מתייחס רק ל grep או לכל מתג שיכול לתת את האפשרות למצוא ביטוי רגולארי?
מה שחשוב זה להשתמש בביטוי רגולארי זה לא משנה באיזה תוכנה בחרת לסנן לפיו (grep היא פשוט הכי פשוטה)
רק את השורות שאורכן זוגי - זה נראה לי קשור לכמתים, משהו עם
{}
אך לא הצלחתי למצוא איך להגדיר קפיצה.
אולי תתן כיוון?
הכיוון הוא לחשוב על זוגות - למשל אנחנו יודעים איך למצוא שורות שהאורך שלהן יהיה לפחות 50 תווים:
.{50}
ואנחנו יודעים לחשוב על שורות שהאורך שלהן יהיה עד 10 תווים:
^.{0,10}$
בשני המקרים הסימן נקודה מייצג תו בודד. השאלה כאן איך לייצג זוג של תווים?
- רק את השורות שכוללות מספר בינארי.
grep -Ew --color '[01]+' myinput
- מספר בינארי זוגי הוא כזה שמסתיים ב-0. הציגו רק את השורות בהן קיים מספר בינארי זוגי.
grep -Ew --color '[01]?0' myinput
- רק את השורות שכוללות מספר בבסיס הקסא-דצימלי.
grep -E --color '0x[0-9a-f]+' myinput
- רק את השורות שמתחילות באות קטנה.
grep -E --color '^[a-z]' myinput
- רק את השורות שאינן ריקות.
grep -E --color '^.+
- רק את השורות שמתחילות באות קטנה ומסתיימות במספר.
grep -E --color '^[a-z].?[0-9]
הציגו מתוך הפלט של ls -l
רק את השורות שאורכן מעל 50 תווים.
ls -l | grep -E '^.{50,}
הציגו מתוך הפלט של ls -l
רק את השורות שאורכן זוגי.
ls -l | grep -E '^(.{2})+