למה head | grep (בלינוקס) נותן תוצאות לא נכונות ?
-
אני משתמש בפקודה הבאה
head -1 * | grep -l -r "xyz" * > /path/to/file
על מנת לקבל רשימה של כל הקבצים ש"מתחילים" בxyz
בפועל אני מקבל בפלט גם רשימה של קבצים שאינם עונים על הדרישות בכלל
(דוגמה: קיבלתי ברשימה קבצים שאין בהם בכלל xyz)אציין שניסיתי גם head -c אבל הוא לא עובד בכלל
מה לא טוב בפקודה הנ"ל ?
-
@משחזר-מידע
מתוךman grep
:FILE of “-” stands for standard input. If no FILE is given, recursive searches examine the working directory, and nonrecursive searches read standard input.
מכיון שעשית recursive וגם נתת שם של קובץ -
*
, הפקודה מתעלמת מ-standard input (שזה מה שאתה מעביר לו דרך ה-|
) ובמקום זה הוא רץ על כל הקובץ.הפתרון לכאורה להוריד את ה-
-r
שאין לו שום משמעות בהקשר של חיפוש על standard input, וגם תוריד את ה-*
. ואז לכאורה זה יעבוד (אבל לא רקורסיבית. לזה צריך להריץ את פקודת ה-head בצורה ריקורסיבית) -
@yossiz המעניין הוא שרוב המוחץ של הפלט כן היה נכון
עריכה: קראתי שוב את תגובתך
@yossiz אמר בלמה head | grep (בלינוקס) נותן תוצאות לא נכונות ?:
ובמקום זה הוא רץ על כל הקובץ.
זה העניין
שהוא לא רץ על כל הקובץ
כמו שכתבתי לעיל הרוב המוחלט תאם את קריטריון החיפוש
בקבצים שהשתרבבו קבלתי תוצאות שלא תואם כלל את החיפוש דהיינו לא היה בפנים הקובץ xyz בכלל -
@משחזר-מידע
למה שאאמין לך? יותר מסתבר שאתה טועה במשהו מאשר להניח ש-grep טועה.האם נסית לצמצם את הפקודה למינימום ההכרחי כדי להדגים את הבעיה? (הפקודה שלמעלה בכל מקרה לא תקין כנ"ל). נסה למצוא את הדוגמה המצומצמת ביותר שמדגים את הבעיה ותעלה קובץ עבור test case ונראה.