Bash Sed דוגמאות

Bash Sed Examples



Bash מאפשר לך לבצע החלפת תבניות באמצעות הרחבה משתנה כמו ($ {var/pattern/replacement}). וכך, האם sed ככה (sed -e 's/pattern/replacement/'). עם זאת, יש יותר מה להחליף דפוסים בקובצי טקסט. כאן נגלה מחדש, למשל, פקודות ותהליכי עבודה שווים כדי לסייע במשימות היומיומיות.

הגדרת דוגמאות מושלמות

להלן מדריך מהיר להתקנת הדוגמה, שאנסה לא להפוך אותה ליותר מדי.







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



בָּרהוא קובץ טקסט המכיל שורה אחת -.



ישן-phpהוא קובץ טקסט המכיל שורות PHP ישנות אשר יישברו ב- php7 ואילך. (רמז: ereg)





שים לב שכל הפונקציות המתוארות לעיל נמצאות להלן ב- Endnote על פונקציות להתקנה.

דוגמאות מושקעות עם פקודות שוות

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



1. הדפס שורה אקראית (שווה ערך למיון -R -| ראש -1)

sed '$ ((אקראי % 100)) p '-

2. הדפס את השורה האחרונה בקובץ (שווה ערך לראש -1 -)

sed '$ p'-

3. הדפס את 10 השורות הראשונות בקובץ (שווה ערך לראש -n 10 -)

sed '10q'-

4. הדפס את השורה הראשונה בקובץ (שווה ערך לזנב -1 -)

sed '1p'-

5. מחק את כל המופעים של תו (שווה ערך ל- tr – delete '0' -, כאשר 0 הוא התו שברצוננו למחוק)

sed 's / 0 // g'-

6. המרת קובץ csv ל- tsv (שווה ערך ל- tr ',' ' t' -)

sed 's/,/ t/g'-

7. הוסף שורה לקובץ (שווה ערך לסרגל החתול -)

sed '$ א ---'-

8. הזינו את השורה לקובץ (שווה ערך לסרגל החתול)

sed '1i ---'-

9. הדפס את כל השורות בקובץ (שווה ערך לחתול -)

sed 'p'-

10. הדפס שורות התואמות תבנית (שווה ערך ל- grep -e '^1' -)

sed '/^1/ p'-

11. מחק שורות התואמות תבנית (שווה ערך ל- grep -v -e '^1' -)

sed '/^1/ ד'-

12. קבל את מספר השורות בקובץ (שווה ערך ל- wc -l -)

sed '$ ='-

13. כתוב לקובץ ברקע (שורת הפקודה המקבילה)

sed $ {1}'-

דוגמה לשימוש ב- sed ליישום הפקודה tee

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

פקודות

טי ()
{
מִבְחָן $ {#} -משווה 1 || לַחֲזוֹר;
sed $ {1}'-
}
רָאשִׁי()
טיזֶה;
חתולזֶה

רָאשִׁי

תְפוּקָה

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

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

דוגמה לשימוש ב- sed להדפסת שורה אקראית בקובץ

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

מיישמים פונקציה ש

  1. מקבל את מספר השורות בקובץ, L
  2. יוצר מספר אקראי בין 1 ל- L, R
  3. הדפסים R.

הפונקציה מצפה שהקלט יועבר מבחוץ.

פקודות

קו כלשהו()
{
פוּנקצִיָהlc()
{
sed '$ ='-
};
פוּנקצִיָהקו הדפסה()
{
sed '$ {1}p '-
};
טמפ '= $( mktemp );
חתול-> $ {temp};
חתול $ {temp} |קו הדפסה $((אַקרַאִי%$( חתול $ {temp} |lc)+1 ));
rm $ {temp}
}

שימוש לדוגמא (1)

סיק 100 |_

פלט (1)

35

שימוש לדוגמא (2)

סלסול https://linuxhint.com/bash_cut_command/ --שקט |תגי רצועה|קו כלשהו

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

שימוש ב- sed להדפסת שורות בקובץ

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

פקודות

קו הדפסה()
{
sed '$ {1}p '-
}

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

פקודות

מילים|קו הדפסהחמישים

תְפוּקָה

חמישים

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

פקודות

לְהַכרִיז -xfמילים
לְהַכרִיז -xfקו הדפסה
סיק 1 10$(מילים| שירותים ) | קסארגס-אנילַחֲבוֹט 'מילים | קו הדפסה {} '

תְפוּקָה

1
אחת עשרה
עשרים ואחת
31
41
51
61
71
81
91

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

דוגמאות מושקעות ללא פקודות מקבילות

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

הפקודה על כל השורות בתסריט מעטפת

sed 's/^/#/'-
מחק את השורה הראשונה
sed '1d'-
לִמְחוֹקאחרוןקַו
sed '$ d'-
הכנס שורה לפני שורות התואמות תבנית
sed '/0 $/i ---'-
הכנס שורה אחרי שורות המתאימות לתבנית
sed ' / 0 $ / ---'-
הפשט תגי html
sed 's /†*.// g'-
שדרג eregבקוד PHP ישן להפעלהבphp7 ואילך
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
חשבוןאם sedמוקדם יותר מגרסה מסוימת
sed 'v 4.5'-

דוגמה לגירסת sed המסועפת ב- bash

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

פקודות

test-sed-version-at-max() {
זרק | sed 'v$ {1}'-2> /dev/ריק
}
גירסת נסיון()
{
זרק 'גִרְסָה$ {1}. בסדר. עשה זאת ';
test-sed-version-at-max$ {1} && {
זרק 'ישן';
נָכוֹן
} || {
זרק 'חָדָשׁ'
};
זרק 'דרך.'
}
רָאשִׁי()
{
מְקוֹמִיv;
לvב 4.{4,5};
לַעֲשׂוֹת
גירסת נסיון$ {v};
בוצע
}
רָאשִׁי

תְפוּקָה

גִרְסָה4.4. בסדר. עשה זאת בדרך הישנה.
גִרְסָה4.5. בסדר. עשה זאת בדרך החדשה.

שים לב שגרסת ה- sed הפועלת במחשב שלי בעת הקלדת התווים הללו היא 4.4, מה שיסביר את הפלט למעלה. כמו כן, יחד עם זאת, הגרסה האחרונה של gnu sed הייתה 4.7, מבוגרת בכ -3 שנים מזה שיש לי. הסד שלי ישן! למעשה, ב -4.0.6 sed, נוסף פרמטר לפקודת הגרסה כך שאסטרטגיה זו פועלת עבור כל גרסה v4.0.6 לפחות, שהיא מקלה בהתחשב בכך שגרסה שוחררה בתחילת 2003. אתה טוב.

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

פונקציית bash לדוגמה באמצעות sed כדי להפשיט תגי HTML

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

פקודות

תגי רצועה()
{
sed 's /†*.// g'-
}
סלסול https://linuxhint.com/bash_cut_command/ --שקט |תגי רצועה

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

דוגמאות סד עם זרימות עבודה: דוגמה לזרימת עבודה: החלף בבטחה את כל באמצעות Find, Grep ו- Sed

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

זרימת עבודה

  1. למצוא
  2. אחיזה
  3. sed
למצוא

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

למצוא -סוּגו-שֵׁם | אחיזה -v| קסארגס-אני ...

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

למצוא -סוּגו-שֵׁם*.php| אחיזה -v '.ללכת' | קסארגס -אני...

קרא עוד על הפקודה xargs ב- bash.

אחיזה

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

למצוא -סוּגו-שֵׁם*.php| אחיזה -v '.ללכת' |
קסארגס -אני אחיזה קצת_פטר-אוֹ

הפקודה למעלה אמורה להחזיר רשימה של מחרוזות התואמות some_pattern.

sed

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

למצוא -סוּגו-שֵׁם*.php| אחיזה -v '.ללכת' |
קסארגס -אני sed -אני ש/קצת_פטר/תַחֲלִיף/ז

הפקודה grep הופכת sed -i והאפשרות -o מוסרת. והנה יש לך את זה.

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

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

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

אוֹפְּצִיָה תיאור
-אני ערוך במקום. אם הקלט הוא קובץ (לא מובא) התוצאה של ביטויים תחליף את תוכן הקובץ.

סד מקבל אחת

למשל) sed -n…

-אני מייצג ביטוי. הפרמטר שלה הוא ביטוי בשפה sed.

סד מקבל רבים

למשל) sed -e'expr1 '-e'expr2'

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

למשל) sed -n…

למידע נוסף על אפשרויות זמינות, ראה sed –help

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

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

  • סוג
  • רֹאשׁ
  • זָנָב
  • אחיזה
  • חתול
  • NS
  • טי

הערת סיום על הנגרר - למשל פקודות שוות ערך

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

חתולקובץ כלשהו| סוג -| רֹאשׁ -1

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

חתולקובץ כלשהו| סוג | רֹאשׁ -1

זה מה שקרה עם התו - אחרי פקודות בדוגמאות.

הערות סיום על פונקציות להתקנה

במקרה שאתה מחפש, להלן פונקציות להתקנה של הדוגמאות שלעיל. הפלט המתקבל באמצעות declare -f. קרא עוד על הפקודה declare in bash לשימושים נוספים.

פקודות

מילים()
{
סיק 100
}
בָּר()
{
זרק ---
}
ישן-php()
{
זרק 'ereg ($ UA,' Bottybot ')'
}

שורה תחתונה

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