שאלה בסיסית בפקודה של לינוקס

ronib25

New member
שאלה בסיסית בפקודה של לינוקס

היי.
אני צריך לרשום פקודה בלינוקס שסופרת עבורי את מספר המילים שיש בקובץ c
מה שלמדתי זה את הפקודה grep שיודעת לספור כמות הופעות של מה שאני מבקש...
הבעיה שכאשר אני רושם את הפקודה : grep -c ' ' name.c אני בוודאות לא מקבל את כמות המילים..(אני שיש לי 10 מילים כשבפועל יש באזור 165)..
מחיפוש באינטרנט מצאתי שניתן לעשות זאת בעזרת פקודה בשם wc עם המשך, אך לא למדתי אותה עדיין...
כיצד אני יכול לפתור את הבעיה הזו ?
ועוד שאלה קטנה: כשאני רוצה לדעת את כמות השורות אני בקובץ אני מקליד :
grep -c ^ name.c מה משמעות הסימן ^ ?? בלעדיו זה לא עובד ואין לי מושג מה הוא אומר..
תודה :)
 

BravoMan

Active member
man grep

grep היא פקודה שמזהה ביטויים רגולריים.
לביטויים האלה יש שפה משלהם.
&nbsp
בשפה הזו הסימן ^ משמעותו "תחילת שורה".
&nbsp
אם אתה רוצה לספור בעזרתה מילים, אתה צריך קודם כל לבנות ביטוי שמזהה מילה.
בנוסף, הפרמטר c- סופר את מספר השורות שבהן נמצאו התאמות, ולא את ההתאמות עצמן.
אם בשורה אחת נמצאו מספר התאמות, השורה עדיין תספר פעם אחת בלבד.
&nbsp
אם 165 מילים בקובץ שלך תוספים בסה"כ 10 שורות, אז התוצאה שקיבלת נכונה.
&nbsp
בנוסף, גם אם תרצה לספור התאמות, זה לא נכון לספור רווחים כדי לספור מילים.
למשל, עבור שתי מילים, תקבל רק רווח אחד.
ואם הקובץ משתמש ברווחים במקום טאבים, על כל תחילת שורה תקבל לפחות 4 התאמות וכנראה אף יותר.
&nbsp
לפי התיאור שלך נשמע שאתה עושה תרגיל.
התרגיל מבקש שימוש לא שגרתי וקצת מעבר לבסיסי בפקודה grep.
בד"כ, היו משתמשים בפקודה wc כי לזה היא נועדה, אבל היות ואסור לך, הנה כמה רמזים:
א) תבנה ביטוי רגולרי שמגדיר מילה.
ב) תצטרך פעמיים grep, האם אתה יודע כיצד להעביר פלט מפקודה לפקודה?
ג) ל-grep יש פרמטר שמדפיס כל התאמה בשורה נפרדת

&nbsp
בהצלחה בתרגיל.
&nbsp
ואם טעיתי וזה לא תרגיל, פשוט תריץ wc -w וזה ייתן לך את מספר השורות.
זו הדרך הנכונה לעבוד.
&nbsp
&nbsp
 

ronib25

New member
בסוף היה ניתן לפתור בעזרת wc אז פתרתי...

בכל אופן wc -w זה עבור מס׳ מילים
ו wc -l עבור מספר שורות...
שאלונת אחרונה..מה הסימון השקול ביחס משפת c לביטוי ' ' כלומר רווח תחת גרש בודדת ??
בשפת לינוקס..
 

BravoMan

Active member
השאלה שלך לא מובנת.

קודם כל, אין דבר כזה "שפת לינוקס".
wc ו-grep הן תוכנות. כמו Notepad. כמו Visual Studio שבו תכנתת (אני מנחש).
רק הרבה יותר קטנות, שמבצעות כל אחת דבר אחד ספציפי.
&nbsp
grep עושה חיפושים בתוך טקסט.
wc סופר דברים: שורות, מילים, אותיות.
&nbsp
אין לי מושג מה זה "רווח תחת גרש", אז אין לי מושג מה אתה רוצה לשאול.
 

ronib25

New member
הסבר

נניח ואני רוצה לחפש תחילת שורה חדשה אז אמרת מקודם שהסימן של שורה חדשה היא ^.
במידה ואני רוצה לחפש כמות סימני רווח בעזרת grep. האם זאת הפקודה שצריכה לבוא:
grep -c " " nameOfFile.txt ??
 

BravoMan

Active member
לא.

קודם כל, grep הוא לא כלי ספירה.
הוא כלי שמחפש התאמות, וברירת מחדל מדפיס את השורות מתוך קובץ טקסט בהן נמצאה התאמה.
&nbsp
אפשר לגרום לו להדפיס רק את חתיכת השורה שמתאימה, רק את מה שלא מתאים, או לא להדפיס כלום ולרק להחזיר האם נמצאה התאמה או לא.
&nbsp
אם אתה רוצה למצוא רווח בודד, בלי קשר למה שיש מסביב, אתה יכול לחפש פשוט רווח.
עדיף בתוך [ ] - סוגריים מרובעים, שמציינים בד"כ קבוצת תווים.
אפשר בלי, רק בתוך גרש או גרשיים, אבל ככה יהיה לך נוח לזהות שהרווח שם.
&nbsp
כמובן, אם יש לך כמה רווחים ברצף, כל אחד מהם יהיה התאמה נפרדת.
אבל c- יספור את כולם פעם אחת, כי הם כולם באותה שורה.
 
למעלה