כיצד להשתמש בפקודה sed בלינוקס

חלון מסוף במערכת לינוקס.

Fatmawati Achmad Zaenuri/Shutterstock



זה אולי נשמע מטורף, אבל ה-Linux |_+_| command הוא עורך טקסט ללא ממשק. אתה יכול להשתמש בו משורת הפקודה כדי לתפעל טקסט בקבצים ובזרמים. אנו נראה לך כיצד לרתום את כוחו.

כוחו של sed

ה- |_+_| הפקודה היא קצת כמו שחמט: זה לוקח שעה ללמוד את היסודות וכל החיים כדי לשלוט בהם (או, לפחות הרבה תרגול). אנו נראה לך מבחר של הימורי פתיחה בכל אחת מהקטגוריות העיקריות של |_+_| פונקציונליות.





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

עם |_+_| אתה יכול לעשות את כל הפעולות הבאות:



  • בחר טקסט
  • טקסט תחליף
  • הוסף שורות לטקסט
  • מחק שורות מהטקסט
  • שנה (או שמור) קובץ מקורי

בנינו את הדוגמאות שלנו כדי להציג ולהדגים מושגים, לא כדי לייצר את המדויק (והפחות נגיש) |_+_| פקודות. עם זאת, פונקציונליות התאמת הדפוס ובחירת הטקסט של |_+_| להסתמך מאוד על ביטויים רגולריים ( קבצים רגסיים ). תצטרך קצת היכרות עם אלה כדי להפיק את המיטב מ-|_+_|.

קָשׁוּר: כיצד להשתמש בביטויים רגילים (רגיזים) בלינוקס

דוגמה פשוטה

ראשית, אנו הולכים להשתמש ב-|_+_| לשלוח קצת טקסט אל |_+_| דרך צינור , ויש לך |_+_| להחליף חלק מהטקסט. לשם כך, נקליד את הדברים הבאים:



sedפרסומת

ה- |_+_| הפקודה שולחת howtogonk לתוך |_+_|, וכלל ההחלפה הפשוט שלנו (ה-s מייצג החלפה) מיושם. |_+_| מחפש בטקסט הקלט מופע של המחרוזת הראשונה, ויחליף כל התאמות בשנייה.

גונק המחרוזת מוחלף בגיק, והמחרוזת החדשה מודפסת בחלון הטרמינל.

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

בחירת טקסט

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

אנו מקלידים את הדברים הבאים כדי להסתכל עליו עם |_+_|:

sed

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

פרסומת

כדי לחלץ שורות 1-4, נקליד את הפקודה הזו:

sed

שימו לב לפסיק בין |_+_| וכן |_+_|. ה- |_+_| פירושו להדפיס קווים מותאמים. כברירת מחדל, |_+_| מדפיס את כל השורות. היינו רואים את כל הטקסט בקובץ עם השורות התואמות מודפסות פעמיים. כדי למנוע זאת, נשתמש ב-|_+_| אפשרות (שקטה) לדכא את הטקסט ללא התאמה.

אנו משנים את מספרי השורות כדי שנוכל לבחור פסוק אחר, כפי שמוצג להלן:

sed

אנחנו יכולים להשתמש ב-|_+_| אפשרות (ביטוי) לבצע בחירות מרובות. עם שני ביטויים, נוכל לבחור שני פסוקים, כך:

sed

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

sed

נוכל גם לבחור קו התחלה ולומר |_+_| כדי לעבור בקובץ ולהדפיס שורות חלופיות, כל שורה חמישית, או לדלג על כל מספר שורות. הפקודה דומה לאלה שהשתמשנו למעלה כדי לבחור טווח. אולם הפעם, נשתמש בטילדה (|_+_|) במקום בפסיק כדי להפריד בין המספרים.

פרסומת

המספר הראשון מציין את קו הזינוק. המספר השני אומר |_+_| אילו שורות אחרי קו הזינוק אנחנו רוצים לראות. המספר 2 פירושו כל שורה שנייה, 3 פירושו כל שורה שלישית וכן הלאה.

אנו מקלידים את הדברים הבאים:

sed

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

הסימן (|_+_|) מייצג את תחילת השורה. נצרף את מונח החיפוש שלנו באלכסונים קדימה (|_+_|). אנו כוללים גם רווח לאחר ולכן מילים כמו אנדרואיד לא ייכללו בתוצאה.

קריאה |_+_| סקריפטים יכולים להיות קצת קשים בהתחלה. ה- |_+_| פירושו הדפס, בדיוק כפי שהיה בפקודות שהשתמשנו למעלה. עם זאת, בפקודה הבאה, קו נטוי קדימה קודם לה:

sed

שלוש שורות שמתחילות ב-And נשלפות מהקובץ ומוצגות עבורנו.

ביצוע תחליפים

בדוגמה הראשונה שלנו, הראינו לך את הפורמט הבסיסי הבא עבור |_+_| החלפה:

echoפרסומת

ה- |_+_| מספר |_+_| זו תחליף. המחרוזת הראשונה היא תבנית החיפוש, והשנייה היא הטקסט שבו נרצה להחליף את הטקסט המותאם. כמובן, כמו בכל עניין של לינוקס, השטן נמצא בפרטים הקטנים.

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

sed

בשורה הראשונה, רק המופע השני של היום משתנה. זה בגלל |_+_| עוצרים אחרי המשחק הראשון לכל שורה. עלינו להוסיף g בסוף הביטוי, כפי שמוצג להלן, כדי לבצע חיפוש גלובלי כך שכל ההתאמות בכל שורה יעובדו:

sed

זה מתאים לשלושה מתוך הארבעה בשורה הראשונה. כי המילה הראשונה היא יום, ו-|_+_| הוא תלוי רישיות, הוא לא מחשיב את המקרה הזה לזה של יום.

אנו מקלידים את הדברים הבאים, ומוסיפים |_+_| לפקודה בסוף הביטוי כדי לציין חוסר רגישות לאותיות גדולות:

echo

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

פרסומת

לדוגמה, אם אנו מקיפים תווים בסוגריים מרובעים (|_+_|), הם מתפרשים ככל תו מרשימת התווים הזו.

אנו מקלידים את הדברים הבאים, וכוללים את D ו-d בקבוצה, כדי להבטיח שהוא תואם גם ליום וגם ליום:

sed

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

sed

נחפש שני רווחים ונחליף אותם באחד. אנו נעשה זאת באופן גלובלי כך שהפעולה תחזור על עצמה לאורך כל הקו. כדי להיות ברור, תבנית החיפוש היא רווח, כוכבית רווח (|_+_|), ומחרוזת ההחלפה היא רווח בודד. ה- |_+_| מגביל את ההחלפה לארבע השורות הראשונות של הקובץ.

אנחנו מחברים את כל זה יחד בפקודה הבאה:

sed

זה עובד יפה! דפוס החיפוש הוא מה שחשוב כאן. הכוכבית (|_+_|) מייצגת אפס או יותר מהתו הקודם, שהוא רווח. לפיכך, דפוס החיפוש מחפש מחרוזות של רווח אחד או יותר.

פרסומת

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

אם נקליד את הדברים הבאים וצמצם את דפוס החיפוש לרווח בודד, תראה מיד מדוע עלינו לכלול שני רווחים:

less

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

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

אנו מקלידים את הדברים הבאים, תוך שימוש בסימן |_+_| (ביטוי) שהשתמשנו קודם לכן, המאפשר לנו לבצע שניים או יותר החלפות בו-זמנית:

1

נוכל להשיג את אותה תוצאה אם ​​נשתמש בנקודה-פסיק (|_+_|) כדי להפריד בין שני הביטויים, כך:

4

פרסומת

כאשר החלפנו יום לשבוע בפקודה הבאה, המופע של day בביטוי well a-day הוחלף גם כן:

p

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

אנו מקלידים את הדברים הבאים כדי להפוך את התבנית התואמת שלנו למילה שאחריה:

sed

זה נותן לנו את התגובה שאנחנו רוצים.

תחליפים מורכבים יותר

בואו ניתן לקולרידג' הפסקה ונשתמש ב-_+_| כדי לחלץ שמות מהקובץ |_+_| קוֹבֶץ.

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

עליך לכלול את תת-הביטוי בסוגריים [|_+_|] כדי שזה יעבוד. יש להקדים את הסוגריים גם באלכסון לאחור (|_+_|) כדי למנוע את ההתייחסות אליהם כאל תו רגיל.

כדי לעשות זאת, תקליד את הדברים הבאים:

-n

בואו נפרק את זה:

    -e:ה- |_+_| פקודה ותחילת ביטוי ההחלפה. sed:סוגרי הפתיחה [|_+_|] המקיף את ביטוי המשנה, שלפניו נטוי אחורי (|_+_|). ~:ביטוי המשנה הראשון של מונח החיפוש מכיל קבוצה בסוגריים מרובעים. הסימן (|_+_|) פירושו לא בשימוש בקבוצה. קבוצה פירושה שכל תו שאינו נקודתיים (|_+_|) יתקבל כהתאמה. sed:הסוגריים הסוגרים [|_+_|] עם קו נטוי קודם (|_+_|). sed:תת-ביטוי חיפוש שני זה אומר כל תו וכל מספר מהם. ^:חלק ההחלפה של הביטוי מכיל |_+_| לפניו נטוי אחורי (|_+_|). זה מייצג את הטקסט התואם לתת-הביטוי הראשון. /:הסגר קדימה-לוכסן (|_+_|) והמרכאה הבודדת (|_+_|) מסיימים את |_+_| פקודה.
פרסומת

המשמעות של כל זה היא שאנחנו הולכים לחפש כל מחרוזת תווים שאינה מכילה נקודתיים (|_+_|), שתהיה המופע הראשון של טקסט תואם. לאחר מכן, אנו מחפשים כל דבר אחר בשורה זו, שתהיה המופע השני של טקסט תואם. אנחנו הולכים להחליף את כל השורה בטקסט שתאם לתת-הביטוי הראשון.

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

פלט מ

לאחר מכן, נסגור את תת-הביטוי השני בסוגריים [|_+_|] כדי שנוכל להתייחס אליו גם לפי מספר. נחליף גם את |_+_| עם |_+_|. הפקודה שלנו תחליף כעת את כל השורה בכל דבר מהנקודתיים הראשונה (|_+_|) ועד סוף השורה.

אנו מקלידים את הדברים הבאים:

sed

השינויים הקטנים האלה הופכים את משמעות הפקודה, ואנו מקבלים הכל מלבד שמות המשתמש.

כעת, בואו נסתכל על הדרך המהירה והקלה לעשות זאת.

מונח החיפוש שלנו הוא מהנקודתיים הראשון (|_+_|) עד סוף השורה. מכיוון שביטוי ההחלפה שלנו ריק (|_+_|), לא נחליף את הטקסט המותאם בשום דבר.

פרסומת

אז, אנו מקלידים את הדברים הבאים, חותכים הכל מהנקודתיים הראשון (|_+_|) ועד סוף השורה, ומשאירים רק את שמות המשתמש:

/p

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

יש לנו קובץ של פסיקים (|_+_|) המפריד בין שמות פרטיים ושמות משפחה. אנחנו רוצים לרשום אותם כשם משפחה, שם פרטי. אנו יכולים להשתמש ב-|_+_|, כפי שמוצג להלן, כדי לראות מה יש בקובץ:

sed

כמו הרבה |_+_| הפקודות, הבא עשוי להיראות בלתי חדיר בהתחלה:

s

זוהי פקודת החלפה כמו האחרות שבהן השתמשנו, ודפוס החיפוש די קל. נפרט את זה למטה:

    sed:פקודת ההחלפה הרגילה. sed:מכיוון שהקארט לא נמצא בקבוצה (|_+_|), זה אומר תחילת השורה. sed:תת הביטוי הראשון הוא כל מספר של תווים כלשהם. זה מוקף בסוגריים [|_+_|], שלפני כל אחד מהם יש קו נטוי אחורי (|_+_|) כדי שנוכל להתייחס אליו לפי מספר. כל דפוס החיפוש שלנו עד כה מתורגם כחיפוש מתחילת השורה ועד לפסיק הראשון (|_+_|) עבור כל מספר של תווים כלשהם. i:תת הביטוי הבא הוא (שוב) כל מספר של כל תו. זה גם מוקף בסוגריים [|_+_|], שלפני שניהם קו נטוי אחורי (|_+_|) כדי שנוכל להתייחס לטקסט התואם לפי מספר. []:סימן הדולר (|_+_|) מייצג את סוף השורה ויאפשר את המשך החיפוש שלנו עד סוף השורה. השתמשנו בזה פשוט כדי להציג את סימן הדולר. אנחנו לא באמת צריכים את זה כאן, מכיוון שהכוכבית (|_+_|) תלך לסוף השורה בתרחיש זה. האלכסון קדימה (|_+_|) משלים את קטע דפוס החיפוש. *:מכיוון שסגרנו את שני ביטויי המשנה שלנו בסוגריים, נוכל להתייחס לשניהם לפי מספריהם. מכיוון שאנו רוצים להפוך את הסדר, אנו מקלידים אותם בתור |_+_|. יש להקדים את המספרים באלכסון אחורי (|_+_|). 1,4:זה מאפשר לפקודה שלנו לעבוד גלובלית בכל שורה. *:הקובץ שאנחנו עובדים עליו.

אתה יכול גם להשתמש בפקודה Cut (|_+_|) כדי להחליף שורות שלמות התואמות לדפוס החיפוש שלך. אנו מקלידים את הדברים הבאים כדי לחפש שורה עם המילה neck בה, ומחליפים אותה במחרוזת טקסט חדשה:

sed

פרסומת

השורה החדשה שלנו מופיעה כעת בתחתית התמצית שלנו.

הוספת שורות וטקסט

אנחנו יכולים גם להוסיף שורות וטקסט חדשים לקובץ שלנו. כדי להוסיף שורות חדשות אחרי כל השורות התואמות, נשתמש בפקודה Append (|_+_|).

הנה הקובץ איתו אנו הולכים לעבוד:

cat geeks.txt

ספרנו את השורות כדי שיהיה קצת יותר קל לעקוב אחרי זה.

אנו מקלידים את הדברים הבאים כדי לחפש שורות המכילות את המילה He, ומכניסים שורה חדשה מתחתיהן:

-e

אנו מקלידים את הדברים הבאים וכוללים את הפקודה Insert (|_+_|) כדי להוסיף את השורה החדשה מעל אלה המכילות טקסט תואם:

;

נוכל להשתמש באמפרסנד (|_+_|), המייצג את הטקסט התואם המקורי, כדי להוסיף טקסט חדש לשורה תואמת. |_+_| , |_+_| וכן הלאה, מייצגים תת-ביטויים תואמים.

פרסומת

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

כדי לעשות את כל זה, נקליד את הדברים הבאים:

sed

אנו מקלידים את הדברים הבאים, כולל ה- |_+_| הפקודה, שתוסיף שורה ריקה בין כל שורה:

etc/passwd

אם ברצונך להוסיף שתי שורות ריקות או יותר, תוכל להשתמש ב-|_+_|, |_+_| וכן הלאה.

מחיקת שורות

הפקודה Delete (|_+_|) מוחקת שורות התואמות לדפוס חיפוש, או אלה שצוינו עם מספרי שורות או טווחים.

לדוגמה, כדי למחוק את השורה השלישית, נקליד את הדברים הבאים:

sed

כדי למחוק את טווח השורות ארבע עד חמש, נקליד את הדברים הבאים:

()פרסומת

כדי למחוק שורות מחוץ לטווח, אנו משתמשים בסימן קריאה (|_+_|), כפי שמוצג להלן:

שמירת השינויים שלך

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

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

לקצת שקט נפשי, |_+_| יכול ליצור גיבוי של הקובץ המקורי לפני שהוא מבצע את הפקודה שלו.

אתה יכול להשתמש באפשרות במקום (|_+_|) כדי לומר |_+_| כדי לכתוב את השינויים בקובץ המקורי, אבל אם תוסיף לו סיומת קובץ, |_+_| יגבה את הקובץ המקורי לקובץ חדש. זה יהיה שם כמו הקובץ המקורי, אבל עם סיומת קובץ חדשה.

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

כדי לעשות את כל זה, נקליד את הדברים הבאים:

sed 's/פרסומת

אנו מקלידים את הדברים הבאים כדי לוודא שקובץ הגיבוי שלנו לא השתנה:

sed

אנו יכולים גם להקליד את הדברים הבאים כדי להפנות את הפלט לקובץ חדש ולהשיג תוצאה דומה:

(

אנו משתמשים ב-|_+_| כדי לאשר שהשינויים נכתבו לקובץ החדש, כפי שמוצג להלן:

(

קָשׁוּר: איך אתה באמת משתמש ב-Regex?

לאחר סיד את כל זה

כפי שבטח שמתם לב, אפילו הפריימר המהיר הזה על |_+_| הוא ארוך למדי. יש הרבה בפקודה הזו, ויש אפילו יותר שאתה יכול לעשות עם זה .

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

קָשׁוּר: 10 פקודות לינוקס בסיסיות למתחילים

פקודות לינוקס
קבצים זֶפֶת · pv · חתול · טק · chmod · אחיזה · הבדל · sed · עם · איש · דחף · popd · fsck · testdisk · seq · fd · פנדוק · CD · $PATH · מביך · לְהִצְטַרֵף · jq · לְקַפֵּל · ייחודי · journalctl · זָנָב · מדינה · ls · fstab · זרק · פָּחוּת · chgrp · chown · לְהַאִיץ · תראה · מחרוזות · סוּג · לשנות שם · רוכסן · לִפְתוֹחַ · הר · umount · להתקין · fdisk · mkfs · rm · rmdir · rsync · df · gpg · אָנוּ · ננו · mkdir · מ · ב · תיקון · להמיר · rclone · שמץ · SRM
תהליכים כינוי · מָסָך · חלק עליון · נֶחְמָד · נחמדים · התקדמות · רצועה · מערכת · tmux · chsh · הִיסטוֹרִיָה · בְּ- · קבוצה · חינם · איזה · dmesg · usermod · נ.ב · chroot · xargs · tty · זרת · lsof · vmstat · פסק זמן · קִיר · כן · לַהֲרוֹג · לִישׁוֹן · סודו · שֶׁלוֹ · זְמַן · הוספה קבוצתית · usermod · קבוצות · לשוו · לכבות · לְאַתחֵל · תפסיק · כיבוי · passwd · lscpu · crontab · תַאֲרִיך · bg · fg
רשת netstat · פינג · traceroute · ip · ss · מי זה · fail2ban · bmon · אתה · אֶצבַּע · nmap · ftp · סִלְסוּל · wget · מי · מי אני · ב · iptables · ssh-keygen · ufw

קָשׁוּר: מחשבי Linux הטובים ביותר למפתחים וחובבי

קרא את הבא תמונת פרופיל עבור דייב מקיי דייב מקיי
דייב מקיי השתמש לראשונה במחשבים כשסרט נייר מחורר היה באופנה, ומאז הוא מתכנת. לאחר למעלה מ-30 שנה בתעשיית ה-IT, הוא כעת עיתונאי טכנולוגיה במשרה מלאה. במהלך הקריירה שלו, הוא עבד כמתכנת עצמאי, מנהל צוות פיתוח תוכנה בינלאומי, מנהל פרויקטים של שירותי IT, ולאחרונה כמנהל הגנת מידע. הכתיבה שלו פורסמה על ידי howtogeek.com, cloudsavvyit.com, itenterpriser.com ו-opensource.com. דייב הוא אוונגליסט של לינוקס ותומך בקוד פתוח.
קרא את הביוגרפיה המלאה

מאמרים מעניינים