פרסומת

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

אז מה הם? כיצד משתמשים בהן? וכיצד, כשמשולבים יחד, הם מקלים על עיבוד טקסט?

מה זה סד?

סד פותחה בשנת 1971 ב מעבדות פעמוניםמאת חלוץ המחשוב האגדי לי א. מקמהון.

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

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

לדוגמה, אם מישהו היה כותב תסריט של Sed שהחליף את המילה "בירה" ב"סודה ", ואז העביר בתיקיית טקסט שהכילה את כל מילים ל" 99 בקבוקי בירה על הקיר ", זה היה עובר על הקובץ הזה על בסיס קו אחר שורה, ומדפיס" 99 בקבוקי סודה על הקיר ", וכך ב.

תסריט Sed הבסיסי ביותר הוא תסריט הלו עולם. כאן אנו משתמשים בכלי השירות Unix Echo, שמוצא מחרוזות בלבד, כדי להדפיס "שלום עולם". אבל אנו מצנחים את זה לסד ואומרים לו להחליף את "העולם" ב"דייב ". דברים שמסבירים את עצמם.

instagram viewer

הד "שלום עולם" | סד / עולם / דייב
סדוק-דייב

אתה יכול גם לשלב הוראות Sed לקבצים, אם אתה צריך לערוך קצת יותר מסובך. קיבל השראה מ חוט Reddit המצחיק הזה, אני הולך לקחת את המילים ל- A-Ha's קח עלייולהחליף כל גרוע של "אני", "אני" ו- "שלי" בגרג.

ראשית, אני שם את המילים לשיר בקובץ טקסט שנקרא tom.txt. ואז אפתח את עורך הטקסט המועדף עלי (שלי האהוב עליו הוא Vim 7 הסיבות הראשונות לתת סיכוי לעורך הטקסט של Vimבמשך שנים ניסיתי עורך טקסט אחד אחרי השני. אתה קורא לזה, ניסיתי את זה. השתמשתי בכל אחד מהעורכים הללו במשך למעלה מחודשיים כעורך היומיומי העיקרי שלי. איכשהו, אני ... קרא עוד , אבל ננו ננו נגד vim: עורכי טקסט מסופים בהשוואהאף על פי שלינוקס הפכה די קלה לכך שלמעשה כל אחד יכול להשתמש בלי שתצטרך להשתמש בטרמינל מעולם, ישנם כמה מאיתנו שמשתמשים בו באופן קבוע או סקרנים כיצד ניתן לשלוט ... קרא עוד ו גדיט gedit: אחד מעורכי הטקסט הרגילים הממולאים בתכונות [לינוקס וחלונות]כשאתה חושב על עורכי טקסט רגיל, הדבר הראשון שעשוי לצוץ לראש שלך הוא יישום הפנקס רשימות של Windows. זה עושה בדיוק מה שקובע תיאור התפקיד שלו - תכונות רגילות לטקסט רגיל ... קרא עוד שניהם אפשרויות מצוינות), והוסיפו את השורות הבאות. וודא שהקובץ שאתה יוצר מסתיים איתו .sed.

sed-greg-sed

ייתכן שתבחין שבדוגמא שלמעלה חזרתי על עצמי (למשל s / me / Greg / and s / Me / Greg /). זה מכיוון שחלק מהגרסאות של סד, כמו זו שנשלחת עם Mac OS X, כן לא תמיכה בהתאמה ללא רגישות. כתוצאה מכך עלינו לכתוב שתי הוראות סד לכל מילה, כך שהיא מכירה בגירסה ההיוון ללא ההון.

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

לאחר מכן, עלינו להפעיל את הקובץ. לשם כך אנו מפעילים פקודה זו.

חתול tom.txt | sed -f greg.sed

בואו להאט ונראה מה זה עושה. קוראים עיניים נשר יבחינו בכך שאנחנו לא באמצעות אקו כאן. אנו משתמשים בקט. הסיבה לכך היא שבעוד ש- Cat ידפיס את כל התוכן של הקובץ, ההד רק ידפיס את שם הקובץ. בנוסף הבחנת בכך שאנחנו מריצים את סד עם הדגל "-f". זה אומר לו לפתוח את הסקריפט כקובץ.

התוצאה הסופית היא זו.

סד-גרג-סקריפט

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

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

חתול tom.txt | sed / ^ קח / ד
sed-regex-take

סד הוא כמובן שימושי להפליא. אבל זה אפילו יותר חזק בשילוב עם Awk.

מה זה Awk?

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

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

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

אך בעוד סד ועוק עשויים לחלוק מטרות דומות, הן שתי שפות שונות לחלוטין, עם שתי פילוסופיות עיצוב שונות לחלוטין. Awk דומה יותר לחלקם שפות למטרות כלליות כיצד לבחור שפת תכנות ללמוד היום ולקבל עבודה נהדרת תוך שנתייםזה יכול לקחת שנים של עבודה מסורה כדי להיות מתכנת טוב באמת; אז האם יש דרך לבחור את השפה הנכונה להתחיל מהיום, כדי להתקבל לעבודה מחר? קרא עוד כמו C, Python and Bash. יש לזה דברים כמו פונקציות, וגישה דמוית יותר לדברים כמו איטרציה ומשתנים (ג'יימס ברוס הסבירו כיצד איטרציה עובדת היסודות המוחלטים של תכנות למתחילים (חלק ב ')בחלק 2 של המדריך למתחילים המוחלט שלנו לתכנות, אעסוק ביסודות של פונקציות, ערכי החזרה, לולאות ומצבים. וודא שקראתם את חלק 1 לפני שתתמודדו עם זה, שם הסברתי את… קרא עוד ). במילים פשוטות, זה מרגיש יותר כמו שפת תכנות.

אז בואו ננסה את זה. בעזרת המילים Take On Me, אנו הולכים להדפיס את כל השורות שאורכן עולה על 20 תווים.

אורך awk ($ 0)> tom.txt 80 ' אורך ער

הדוגמא הבאה שיש לי ללא בושה שרבוט מ התיעוד הרשמי של Awk. אבל זו דוגמה נהדרת לפוטנציאל של השפה העוצמתית, אך הקטנטנה הזו. זו גם הדגמה נהדרת של איך דברים כמו איטרציה ומשתנים עובדים בה. ראשית, צור קובץ בשם "WordCount.awk", והוסף את השורות הבאות.

{עבור (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {עבור (word in freq) printf "% s \ t% d \ n", word, freq [word] }

שמור אותו ואז הפעל אותו עם הפקודה הבאה.

awk -f WordCount.awk tom.txt

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

שילוב השניים

Awk ו- Sed הם שניהם חזקים להפליא כשמשולבים זה בזה. אתה יכול לעשות זאת על ידי שימוש בצינורות יוניקס. אלה הם "|" ביטים בין פקודות.

בואו לנסות זאת: אנו נפרט את כל השורות ב- Take On Me עם יותר מ- 20 תווים באמצעות Awk. לאחר מכן, אנו הולכים להפשיט את כל הקווים המתחילים "לקחת". יחד, הכל נראה כך:

אורך awk ($ 0)> 20 'tom.txt | sed / ^ קח / ד

ומייצר זאת:

משורך באורך כבד

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

חתול tom.txt | sed / ^ קח / ד | awk -f WordCount.awk
awk-wordcount-sed

כוחם של סד ועוב

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

אז למה אכפת לכם? ובכן, מלבד העובדה שאתה אף פעם לא יודע מתי אתה צריך לבצע שינויים צפויים וחוזרים על עצמם במסמך טקסט, Sed ו- Awk נהדרים לניתוח קבצי יומן. זה שימושי במיוחד כשאתה מנסה לבצע באגים בבעיה בשרת LAMP שלך נרשמת לאירוח אתרים SSH בלבד? אל תדאג - התקן בקלות תוכנת אינטרנט כלשהיאינך יודע את הדבר הראשון בהפעלת לינוקס דרך שורת הפקודה החזקה שלה? אל תדאגי יותר. קרא עוד , או הסתכל ביומני הגישה שלך כדי לראות אם השרת שלך נפרץ.

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

מתיו יוז הוא מפתח תוכנה וכותב מליברפול, אנגליה. לעיתים רחוקות הוא נמצא ללא כוס קפה שחור חזק בידו ומעריץ לחלוטין את ה- Macbook Pro ואת המצלמה שלו. תוכלו לקרוא את הבלוג שלו בכתובת http://www.matthewhughes.co.uk ותעקוב אחריו בטוויטר ב- @ matthewhughes.