לינוקס

50 הדוגמאות המעשיות לפקודת SED בלינוקס

50 Practical Examples Sed Command Linux

בית פקודות א-ז 50 הדוגמאות המעשיות לפקודת SED בלינוקס על ידימהדי חסן בפקודות א-זמומלצים 801 3

תוכן

  1. פקודות SED שימושיות למשתמשי מתחילים
  2. כיצד עובד SED: הבנה בסיסית
    1. 1. החלפת קלט טקסט
    2. 2. החלפת קלט טקסט מקבצים
    3. 3. שמירת שינויים בקבצים
    4. 4. שמירת שינויים בקובץ המקורי
    5. 5. בורחים מפליגים
    6. 6. החלפת כל מופע של מחרוזת
    7. 7. שימוש במחרוזת מותאמת
    8. 8. שימוש בביטויים רגולריים מורחבים
    9. 9. ביצוע החלפות מרובות
    10. 10. החלפת תיק בחוסר רגישות
    11. 11. הדפסת קווים ספציפיים
    12. 12. הדפסת טווח קווים
    13. 13. הדפסת שורות לא רצופות
    14. 14. הדפסה של כל שורה N '
    15. 15. החלפת טקסט בטווח
    16. 16. מחיקת שורות מהקלט
    17. 17. מחיקת טווח הקווים מהקלט
    18. 18. מחיקת השורה האחרונה
    19. 19. מחיקת כל השורות פרט לספציפיות
    20. 20. הוספת קווים ריקים
    21. 21. החלפת טקסט בשורות ספציפיות
    22. 22. החלפת המילה ה- N של מחרוזת
    23. 23. הוספת קווים חדשים
    24. 24. הכנסת קווים חדשים
    25. 25. שינוי קווי הכניסה
    26. 26. יצירת קבצי גיבוי לקלט
    27. 27. הדפסת שורות המבוססות על דפוסים
    28. 28. שימוש ב- SED כחלופה ל- GREP
    29. 29. הוספת טקסט מקבצים
    30. 30. כתיבת שינויים בקבצים
    31. 31. שימוש בקובצי תוכנית SED
    32. 32. שימוש בפקודות SED מרובות קווים
    33. 33. הדפסת מספרי שורות
    34. 34. מניעת החלפת סימלינק
    35. 35. הדפסת כל שמות המשתמשים מ /etc /passwd
    36. 36. מחיקת שורות של תגובות מהקלט
    37. 37. מחיקת מרחבי לבן מהקלט
    38. 38. יצירת קיזוז דפים באמצעות SED
    39. 39. היפוך שורות קלט
    40. 40. היפוך תווי קלט
    41. 41. צירוף צמדי קווי תשומות
    42. 42. הוספת קווים ריקים בכל שורת קלט נ '
    43. 43. הדפסת השורות החמישית-אחרונה
    44. 44. שורות הדפסה המכילות מספר תווים ספציפי
    45. 45. מחיקת שורות כפולות
    46. 46. ​​מחיקת כל השורות הריקות
    47. 47. מחיקת השורות האחרונות של פסקאות
    48. 48. הצגת דף העזרה
    49. 49. הצגת הדף הידני
    50. 50. הצגת פרטי גרסה
  3. סוף מחשבות

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





פקודות SED שימושיות למשתמשי מתחילים


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

כיצד עובד SED: הבנה בסיסית


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





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

עקרון העבודה



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

sed [OPTIONS] INPUT sed 'list of ed commands' filename

השורה הראשונה היא התחביר המוצג במדריך ה- sed. השני קל יותר להבנה. אל תדאג אם אינך מכיר פקודות ed כרגע. תלמד אותם לאורך המדריך הזה.

1. החלפת קלט טקסט


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

$ echo 'Hello world!' | sed 's/world/universe/'

פקודה זו תוציא את המחרוזת 'שלום יקום!'. יש לו ארבעה חלקים בסיסיים. ה 'S' הפקודה מציינת את פעולת ההחלפה, /../../ הם תוחמים, החלק הראשון בתוך המפרידים הוא התבנית שצריך לשנות, והחלק האחרון הוא מחרוזת ההחלפה.

2. החלפת קלט טקסט מקבצים


תן לנו קודם ליצור קובץ באמצעות הדברים הבאים.

$ echo 'strawberry fields forever...' >> input-file $ cat input-file

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

$ sed 's/strawberry/blueberry/' input-file

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

$ cat input-file | sed 's/strawberry/blueberry/'

3. שמירת שינויים בקבצים


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

$ cat input-file

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

$ sed 's/strawberry/blueberry/' input-file >> output-file

תוכל לאמת זאת באמצעות הפקודה הבאה.

$ cat output-file

4. שמירת שינויים בקובץ המקורי


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

$ sed -i 's/strawberry/blueberry' input-file $ sed --in-place 's/strawberry/blueberry/' input-file

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

$ sed 's/strawberry/blueberry/' input-file > input-file

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

5. בורחים מפליגים


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

$ echo '/usr/local/bin/dummy' >> input-file $ sed 's//usr/local/bin/dummy//usr/bin/dummy/' input-file > output-file

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

$ sed 's_/usr/local/bin/dummy_/usr/bin/dummy/_' input-file

6. החלפת כל מופע של מחרוזת


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

$ cat <> input-file one two one three two four two three one four EOF

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

$ sed 's/one/ONE/' input-file

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

$ sed 's/one/ONE/g' input-file

זה יחליף את כל המופעים של המילה 'אחד' לאורך זרם הקלט.

החלף את כל הדפוסים באמצעות הפקודה sed

7. שימוש במחרוזת מותאמת

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

$ echo 'one two three 123' | sed 's/123/(123)/'

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

$ echo 'one two three 123' | sed 's/[a-z][a-z]*/(&)/g'

פקודה זו תוסיף סוגריים סביב כל המילים הקטנות בקלט שלנו. אם תשמיט את 'G' option, sed יעשה זאת רק עבור המילה הראשונה, לא של כולן.

8. שימוש בביטויים רגולריים מורחבים


בפקודה שלעיל התאמנו את כל המילים הקטנות באמצעות הביטוי הרגיל [a-z] [a-z]*. הוא תואם לאחת או יותר קטנות. דרך נוספת להתאים אותם תהיה להשתמש במטא -אופי '+' . זוהי דוגמה לביטויים רגילים מורחבים. לפיכך, sed לא תתמוך בהם כברירת מחדל.

$ echo 'one two three 123' | sed 's/[a-z]+/(&)/g'

פקודה זו אינה פועלת כמתוכנן שכן sed אינה תומכת ב- '+' metacharacter מחוץ לקופסה. עליך להשתמש באפשרויות אוֹ -r כדי לאפשר ביטויים רגילים מורחבים ב- sed.

$ echo 'one two three 123' | sed -E 's/[a-z]+/(&)/g' $ echo 'one two three 123' | sed -r 's/[a-z]+/(&)/g'

9. ביצוע החלפות מרובות


אנו יכולים להשתמש ביותר מפקודת sed אחת בבת אחת על ידי הפרדה לפי ';' (נְקוּדָה וּפְסִיק). זה שימושי מאוד מכיוון שהוא מאפשר למשתמש ליצור שילובי פקודות חזקים יותר ולהפחית טרחה נוספת תוך כדי תנועה. הפקודה הבאה מראה לנו כיצד להחליף שלושה מחרוזות בבת אחת בשיטה זו.

$ echo 'one two three' | sed 's/one/1/; s/two/2/; s/three/3/'

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

10. החלפת תיק בחוסר רגישות


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

$ echo 'one ONE OnE' | sed 's/one/1/g' # replaces single one

פקודת ההחלפה יכולה להתאים רק מופע אחד של 'אחד' ובכך להחליף אותו. עם זאת, אמור שאנחנו רוצים שזה יתאים לכל המופעים של 'אחד', ללא קשר למקרה שלהם. אנו יכולים להתמודד עם זה באמצעות הדגל 'i' של פעולת ההחלפה sed.

$ echo 'one ONE OnE' | sed 's/one/1/gi' # replaces all ones

11. הדפסת קווים ספציפיים


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

$ echo 'Adding some more text to input file for better demonstration' >> input-file

כעת, הפעל את הפקודה הבאה כדי לראות כיצד להדפיס שורה ספציפית באמצעות 'p'.

$ sed '3p; 6p' input-file

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

$ sed -n '3p; 6p' input-file $ sed --quiet '3p; 6p' input-file $ sed --silent '3p; 6p' input-file

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

12. הדפסת טווח קווים


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

$ sed -n '2,4p' input-file $ sed --quiet '2,4p' input-file $ sed --silent '2,4p' input-file

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

טווח הדפסים של קווים

13. הדפסת שורות לא רצופות


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

$ sed -n '1,2p; 5,6p' input-file

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

כיצד לספור את מספר ההתרחשויות ב- Excel
$ sed -n -e '1,2p' -e '5,6p' input-file

14. הדפסה של כל שורה N '


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

$ sed -n '1~2p' input-file

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

$ ip -4 a | sed -n '2~3p'

15. החלפת טקסט בטווח


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

$ sed '1,3 s/one/1/gi' input-file

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

16. מחיקת שורות מהקלט


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

$ sed '1d' input-file

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

$ ps | sed '1d'

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

17. מחיקת טווח הקווים מהקלט


קל מאוד גם למחוק טווח שורות על ידי שימוש באופרטור ',' לצד 'ד' אוֹפְּצִיָה. הפקודה sed הבאה תדכא את שלוש השורות הראשונות מתוך קובץ הקלט שלנו.

$ sed '1,3d' input-file

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

$ sed '1d; 3d; 5d' input-file

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

$ ip -4 a | sed '1d; 3d; 4d; 6d'

18. מחיקת השורה האחרונה


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

$ sed '$d' input-file

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

$ seq 3 | sed '$d'

19. מחיקת כל השורות פרט לספציפיות


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

$ free | sed '2!d'

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

$ sed '1,3!d' input-file

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

20. הוספת קווים ריקים


לפעמים זרם הקלט עשוי להיות מרוכז מדי. אתה יכול להשתמש בכלי השירות sed כדי להוסיף שורות ריקות בין הקלט במקרים כאלה. הדוגמה הבאה מוסיפה שורה ריקה בין כל שורה בפלט הפקודה ps.

$ ps aux | sed 'G'

ה 'G' הפקודה מוסיפה את השורה הריקה הזו. תוכל להוסיף מספר שורות ריקות באמצעות יותר מאחת 'G' פקודה עבור sed.

$ sed 'G; G' input-file

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

$ sed '3G' input-file

להוסיף שורות ריקות

21. החלפת טקסט בשורות ספציפיות


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

$ sed '3 s/one/1/' input-file

ה '3' לפני תחילת 'S' הפקודה מציינת שאנחנו רוצים להחליף רק את המילה שנמצאת בשורה השלישית.

22. החלפת המילה ה- N של מחרוזת


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

$ echo 'one one one one one one' | sed 's/one/1/3'

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

$ cat input-file | sed '2 s/two/2/2'

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

23. הוספת קווים חדשים


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

$ sed 'a new line in input' input-file

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

$ sed '3 a new line in input' input-file

24. הכנסת קווים חדשים


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

$ seq 5 | sed 'i 888'

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

$ seq 5 | sed '3 i 333'

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

25. שינוי קווי הכניסה


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

$ seq 5 | sed '3 c 123'

הוא מחליף את תוכן השורה השלישית, שהיא 3, במספר 123. הדוגמה הבאה מראה לנו כיצד לשנות את השורה האחרונה של קובץ הקלט שלנו באמצעות 'C' .

$ sed '$ c CHANGED STRING' input-file

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

$ sed '/demo*/ c CHANGED TEXT' input-file

26. יצירת קבצי גיבוי לקלט


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

$ sed -i.old 's/one/1/g; s/two/2/g; s/three/3/g' input-file

ה -אני option כותב את השינויים שביצע sed בקובץ המקורי. חלק הסיומת .old אחראי ליצירת מסמך input-file.old.

27. הדפסת שורות המבוססות על דפוסים


נגיד, אנחנו רוצים להדפיס את כל השורות מתוך קלט המבוסס על תבנית מסוימת. זה די קל כשאנחנו משלבים את הפקודות sed 'P' עם ה אוֹפְּצִיָה. הדוגמה הבאה ממחישה זאת באמצעות קובץ הקלט.

$ sed -n '/^for/ p' input-file

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

28. שימוש ב- SED כחלופה ל- GREP


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

$ sed -n 's/strawberry/&/p' /usr/share/dict/american-english

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

$ sed -n '/strawberry/p' /usr/share/dict/american-english

אלטרנטיבה grep באמצעות הפקודה sed

29. הוספת טקסט מקבצים


ה 'R' הפקודה של כלי השירות sed מאפשרת לנו לצרף טקסט הנקרא מקובץ לזרם הקלט. הפקודה הבאה יוצרת זרם קלט עבור sed באמצעות הפקודה seq ומוסיפה את הטקסטים הכלולים בקובץ קלט לזרם זה.

$ seq 5 | sed 'r input-file'

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

$ seq 5 | sed '$ r input-file'

תוכל להשתמש בפקודה הבאה כדי להוסיף את התוכן לאחר שורת הקלט n-th.

$ seq 5 | sed '3 r input-file'

30. כתיבת שינויים בקבצים


נניח שיש לנו קובץ טקסט המכיל רשימה של כתובות אינטרנט. נניח, חלקם מתחילים ב- www, חלק ב- https ואחרים ב- http. אנו יכולים לשנות את כל הכתובות המתחילות ב- www כדי להתחיל ב- https ולשמור רק את אלה ששונו לקובץ חדש לגמרי.

$ sed 's/www/https/ w modified-websites' websites

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

31. שימוש בקובצי תוכנית SED


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

$ cat <> sed-script s/a/A/g s/e/E/g s/i/I/g s/o/O/g s/u/U/g EOF

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

$ sed -f sed-script input-file $ sed --file=sed-script  

32. שימוש בפקודות SED מרובות קווים


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

$ sed ' s/a/A/g s/e/E/g s/i/I/g s/o/O/g s/u/U/g'  

בחלק מהפגזים, כמו מעטפת C (csh), עליך להגן על הציטוטים באמצעות התו החוצה ().

$ sed 's/a/A/g  s/e/E/g  s/i/I/g  s/o/O/g  s/u/U/g'  

33. הדפסת מספרי שורות


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

$ sed -n '/ion*/ ='  

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

$ cat -n input-file | grep 'ion*' | awk '{print }'

תוכל להשתמש בפקודה הבאה כדי להדפיס את מספר השורות הכולל בקלט שלך.

$ sed -n '$=' input-file

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

$ echo 'apple' > fruit $ ln --symbolic fruit fruit-link $ sed --in-place --follow-symlinks 's/apple/banana/' fruit-link $ cat fruit

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

35. הדפסת כל שמות המשתמשים מ /etc /passwd


ה /etc/passwd הקובץ מכיל מידע לכל המערכת לכל חשבונות המשתמשים ב- Linux. אנו יכולים לקבל רשימה של כל שמות המשתמשים הקיימים בקובץ זה על ידי שימוש בתוכנית פשוטה אחת. תסתכל מקרוב על הדוגמה שלהלן כדי לראות איך זה עובד.

$ sed 's/([^:]*).*/1/' /etc/passwd

השתמשנו בדפוס ביטוי רגיל כדי לקבל את השדה הראשון מקובץ זה תוך השלכת כל המידע האחר. כאן שוכנים שמות המשתמשים ב- /etc/passwd קוֹבֶץ.

36. מחיקת שורות של תגובות מהקלט


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

$ cat ~/.bashrc | sed -e 's/#.*//;/^$/d'

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

$ cat ~/.vimrc | sed -e 's/'.*//;/^$/d'

פעולה זו תסיר את ההערות מקובץ התצורה של vim, המתחיל בסימן ציטוט כפול ().

למחוק תגובות

37. מחיקת מרחבי לבן מהקלט


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

$ sed 's/^[ 	]*//' whitespace.txt

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

$ sed 's/[ 	]*$//' whitespace.txt

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

$ sed 's/^[ 	]*//;s/[ 	]*$//' whitespace.txt

38. יצירת קיזוז דפים באמצעות SED


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

$ sed 's/^/ /' input-file

כל שעליך לעשות הוא להגדיל או להקטין את המרווח כדי לציין קיזוז אחר. הפקודה הבאה מפחיתה את קיזוז הדף ב -3 שורות ריקות.

$ sed 's/^/ /' input-file

39. היפוך שורות קלט


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

$ sed '1!G;h;$!d' input-file

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

$ sed -n '1!G;h;$p' input-file

40. היפוך תווי קלט


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

$ sed '/
/!G;s/(.)(.*
)/&21/;//D;s/.//' input-file

פקודה זו מחקה את ההתנהגות של לינוקס לְהַאִיץ פקודה. תוכל לאמת זאת על ידי הפעלת הפקודה שלהלן לאחר הפקודה למעלה.

$ rev input-file

41. צירוף צמדי קווי תשומות


הפקודה הפשוטה sed הבאה מצטרפת לשתי שורות רצופות של קובץ קלט כשורה אחת. זה שימושי כאשר יש לך טקסט גדול המכיל שורות מפוצלות.

$ sed '$!N;s/
/ /' input-file $ tail -15 /usr/share/dict/american-english | sed '$!N;s/
/ /'

הוא שימושי במספר משימות מניפולציה של טקסט.

42. הוספת קווים ריקים בכל שורת קלט נ '


אתה יכול להוסיף שורה ריקה בכל שורה n-th של קובץ הקלט בקלות רבה באמצעות sed. הפקודות הבאות מוסיפות שורה ריקה בכל שורה שלישית של קובץ קלט.

$ sed 'n;n;G;' input-file

השתמש בהמשך להוספת השורה הריקה בכל שורה שנייה.

$ sed 'n;G;' input-file

43. הדפסת השורות החמישית-אחרונה


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

$ sed -e :a -e '$q;N;4,$D;ba' input-file

הוא דומה לפקודת הזנב שלהלןזנב -3 קובץ קלט.

44. שורות הדפסה המכילות מספר תווים ספציפי


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

$ sed -n '/^.{15}/p' input-file

השתמש בפקודה שלהלן כדי להדפיס שורות הכוללות פחות מ- 20 תווים.

$ sed -n '/^.{20}/!p' input-file

אנו יכולים גם לעשות זאת בצורה פשוטה יותר בשיטה הבאה.

$ sed '/^.{20}/d' input-file

הדפס שורות המבוססות על תווים

45. מחיקת שורות כפולות


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

$ sed '$!N; /^(.*)
1$/!P; D' input-file

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

46. ​​מחיקת כל השורות הריקות


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

$ sed '/^$/d' input-file $ sed '/./!d' input-file

שתי הפקודות הללו ימחקו כל שורות ריקות הקיימות בקובץ שצוין.

47. מחיקת השורות האחרונות של פסקאות


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

$ sed -n '/^$/{p;h;};/./{x;/./p;}' paragraphs.txt

48. הצגת דף העזרה


דף העזרה מכיל מידע מסכם על כל האפשרויות והשימוש הזמינים בתוכנית sed. תוכל להפעיל זאת באמצעות התחביר הבא.

$ sed -h $ sed --help

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

49. הצגת הדף הידני


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

$ man sed

50. הצגת פרטי גרסה


ה -גִרְסָה אפשרות sed מאפשרת לנו לראות איזו גירסה של sed מותקנת במכונה שלנו. זה שימושי בעת איתור באגים ודיווח על באגים.

$ sed --version

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

סוף מחשבות


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

  • תגיות
  • כלי שירות מערכת
לַחֲלוֹק פייסבוק טוויטר פינטרסט ווטסאפ ReddIt מִברָק Viber

    3 הערות

    1. סאתית 9 ביוני 2020 בשעה 16:37

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

      תשובה
    2. לאונרד 4 ביוני 2020 בשעה 14:23

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

      תשובה

    השאר תגובה בטל תגובה

    הערה: אנא הכנס את תגובתך! שם:* אנא הכנס את שמך כאן דוא'ל:* הזנת כתובת דוא'ל שגויה! אנא הכנס את כתובת הדוא'ל שלך כאן אתר אינטרנט:

    שמור את שמי, כתובת הדוא'ל והאתר שלי בדפדפן זה בפעם הבאה שאגיב.

    נקודה_אימג

    הפרסום האחרון

    דְמוּי אָדָם

    10 אפליקציות החלפת הפנים הטובות ביותר למכשירי Android ו- iOS

    מערכת הפעלה של Windows

    כיצד לתזמן את Windows 10 לרוקן את סל המיחזור באופן אוטומטי

    דְמוּי אָדָם

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

    מערכת הפעלה של Windows

    10 תוכנות ה- Benchmark Benchmark הטובות ביותר למחשב האישי שלך

    חייב לקרוא

    לינוקס

    Fail2ban בלינוקס: כלי אבטחה ושירות אינטרנט למנהלי שרתים

    לינוקס

    ClickUp-תוכנה לניהול פרוייקטים ופריון בין פלטפורמות

    לינוקס

    כיצד להתקין את QupZilla באובונטו, פדורה, דביאן, OpenSUSE

    לינוקס

    קיצורי דרך שימושיים במסוף לינוקס שכל משתמש Power Linux חייב להכיר

    פוסט קשור

    כיצד להתקין ולהתקין את מסוף האינטרנט של תא הטייס במערכת Linux

    כיצד להתקין ולהגדיר Yii PHP Framework באובונטו לינוקס

    כיצד לתקן W: כמה קבצי אינדקס לא הורדו שגיאה ב- Ubuntu Linux

    כיצד להתקין ולהגדיר 1Password על שולחן העבודה של Linux

    כיצד להתקין את עורך הטקסט האחרון של GNU Nano בשולחן העבודה של Linux

    כיצד להתקין סוכן תשתיות שריד חדש במערכת לינוקס



    ^