לאחר grep, השלב ההגיוני הבא הוא הדרכה על sed. הפקודה sed מגיע זרם EDitor, כפי ששמה מציין, היא עוסקת שטף טקסט. עם זאת, אם sed הוא אחד הפקודות החזקות ביותר ב- Unix, הדף הידני שלו הוא גם בין המסתוריים ביותר. אני אנסה במאמר זה כדי לסכם את השימוש הבסיסי ביותר של sed ולאחר מכן לתת לך כמה דוגמאות של סקריפטים מתקדמים.

יסודות

הפקודה הכללית עבור sed היא משהו כמו:

 sed [אפשרות] '{script}' [קובץ טקסט] 

Sed יבצע את הפעולות שאתה רוצה שהוא יעשה על קובץ טקסט ולהציג את התוצאה הפלט הסטנדרטי. אם אתה רוצה את התוצאה בקובץ טקסט, אתה יכול להפנות אותו בשיטה הרגילה:

 sed [אפשרות] '{script}' [קובץ טקסט]> [קובץ טקסט ערוך] 

לחלופין, השתמש באפשרות " -i " שתערוך ישירות את קובץ הקלט:

 sed -i [option] '{script}' [קובץ טקסט] 

עכשיו נתחיל לעבוד על התסריט. הצעד הראשון הברור ביותר הוא סקריפט null:

 sed '' test.txt 

רק להציג את הטקסט test.txt.

שימוש טוב של sed הוא מחיקה. בואו נתרגל דוגמאות.

 sd '2, 4 ד' test.txt 

ימחק את השורות 2 עד 4 של test.txt.

ניתן לנחש שהתחביר עבור הסקריפט הוא:

 sed '[השורה הראשונה למחיקה] [השורה האחרונה למחיקה]' test.txt 

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

 sed '/ ^ # / d' test.txt 

יהיה למחוק כל שורה שמתחילה עם "#" (במילים אחרות, אם אתה קוד, זה יהיה למחוק את כל ההערות שלך).

התחביר הכללי הוא

 sed '/ regex / d' test.txt 

למחיקת השורה המכילה את regex.

 sed '/ regex1 /, / regex2 / d' test.txt 

למחיקת המרווח מהקו המכיל regex1 לקו המכיל regex2.

התו המיוחד "^" שבו השתמשתי בדוגמה הראשונה הוא לציין את תחילת הקו.

ואז, השימוש הבסיסי השני שאני יכול לחשוב עליו הוא תחליף. התחביר הכללי הוא:

 sed -re / regex1 / regex2 / 'test.txt 

זה יהיה אפקט כדי לחפש בשורה הראשונה עבור regex1, להחליף אותו עם regex2, עבור אל השורה הבאה וחזור עד סוף השטף הכניסה.

דוגמה טובה לכך היא:

 sed -re's / ^ # * // 'test.txt 

זה יחליף את הסימן "#" בתחילת השורה, ואת כל החללים הריקים עם שום דבר. במילים אחרות, זה uncomments את קובץ הטקסט. סמל "*" הוא דמות meta בעיצוב 0 או יותר מקומות ריקים כאן.

מִתקַדֵם

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

אם ברצונך למחוק את השורות הריקות של קובץ, באפשרותך להשתמש בפקודה

 sed -re '/ ^ $ / {N; D} 'test.txt 

תו-העל "$" פירושו סוף השורה, ולכן "$ $" מעצב שורות ריקות. לאחר מכן, "{N; D}" הוא תחביר מורכב למדי עבור אומר למחוק את השורה.

אם ברצונך למחוק כל תג בקובץ HTML, זוהי הפקודה עבורך:

 sed -re ': start s /] *> // g; / 

ה- "start" נקרא תווית. זה קצת כמו תג בתוך הסקריפט שאנחנו רוצים לחזור מאוחר יותר על מנת להחיל שינויים מרובים לאותו קו. sed מחפש משהו של הטופס "" (regex) *) ומחליף אותו עם שום דבר, אז את תג ה- HTML הראשון של הקו נמחק. אבל אז, לפני המעבר לשורה הבאה, הוא בודק אם יש משהו אחר שמתחיל עם "<", ואם יש, הוא חוזר לתווית "התחל" ומפעיל מחדש את הטיפול.

סיכום

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

האם אתה יודע פקודה בסיסית נוספת עבור sed? או האם אתה משתמש בסקריפט מתקדם נוסף שמעורב בו אתה רוצה לשתף? אנא יידע אותנו בתגובות.