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

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

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

המשך לקרוא ולהעלות את המיומנויות שלך בשורת הפקודה!

דרישות מוקדמות

ודא שיש לך את הבאים לעקוב אחרי הדגמה בפועל במדריך זה:

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

התקנת sed על אובונטו

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

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

sed --version

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

Verifying sed’s installed version

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

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

Getting an error running sed commands

2. לאחר מכן, הרץ את הפקודה הבאה לעדכון והתקנת sed במערכתך.

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

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

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

פקודה זו מדפיסה את הנתיב המלא לביצועי ה-sed, שבדוגמא זו הוא /usr/bin/sed.

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

which sed
Verifying that the sed command is installed

החלפת מחרוזות בקובץ טקסט

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

למטה מצוגת כמה תרחישים, אך לא מוגבלים לכך, בהם החלפת מחרוזות היא מועילה:

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

התחברות בסיסית לשימוש ב־sed היא כדלקמן, היכן:

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

נניח שיש לך קובץ טקסט בשם urls.txt המכיל רשימת URLים וברצונך לעדכן את כל ה-URLים כך שישתמשו בשם דומיין חדש.

1. הפעל את פקודות ה־echo למטה כדי ליצור את קובץ ה־urls.txt בתיקייה הנוכחית. פקודות אלו לא מספקות פלט אך כותבות טקסטים מסוימים לקובץ.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. לאחר מכן, הפעל את פקודת ה־cat כדי להציג את תוכן קובץ ה־urls.txt. cat urls.txt

cat urls.txt

הפלט למטה מאשר את שלושת ה-URLים הישנים שנכתבו בקובץ ה־urls.txt.

Viewing the contents of the urls.txt file

3. כעת, הפעל את הפקודה למטה כדי למצוא ולהחליף (s) את כל הופעות המחרוזת old-domain.com ב־new-domain.com בקובץ ה־urls.txt.

sed 's/old-domain.com/new-domain.com/' urls.txt

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

Replacing a string in a text file

החלפת הופעות N של מחרוזת

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

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

התחביר הבסיסי לפקודה זו הוא כזה:

  • pattern – המחרוזת להחלפה.
  • replacement – המחרוזת לשימוש כהחלפה.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

כדי לראות כיצד להחליף את המופע ה-nth של מחרוזת, עקוב אחר השלבים האלה:

הפעל את הפקודה echo הבאה כדי ליצור שורת טקסט עם שלושה מופעים של התבנית quick. הפקודה sed אז מחליפה (s) את המופע השני (2) של התבנית quick עם המחרוזת fast.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

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

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

Replacing the nth occurrence of a string

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

באופן נוסף, הריץ את הפקודה הבאה כדי להחליף את המופע השני (2) של התבנית quick במחרוזת fast תוך התעלמות (i) מהקפיטליזציה.

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

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

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

Replacing the nth occurrence of a string while ignoring the letter case

מחליף את כל המופעים של תבנית/מחרוזת תואמת

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

1. צור קובץ בשם input.txt עם תוכן הבא בעורך טקסט המועדף עליך.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. לאחר מכן, הרץ את הפקודה הבאה כדי להחליף (s) את כל הופעות המילה מהיר במילה מהיר מתוך הקובץ input.txt. לאחר ההחלפה, השינויים נכתבים לקובץ output.txt.

sed 's/quick/fast/g' input.txt > output.txt

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

cat output.txt

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

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

Replacing All the Occurrences of a Matching Pattern/String

החלפת מתאם מחרוזת על שורה מסוימת

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

למטה יש התחביר להחלפת מחרוזת משורה ספציפית, כאשר n מייצג את מספר השורה.

sed 'n s/pattern/replacement/' input_file output_file

1. צור קובץ בשם myfile.txt והכנס לתוכו את התוכן הבא.

test1
test2
test3

2. לאחר מכן, הרץ את הפקודה sed לביצוע השלבים הבאים:

  • חפש את המילה test2 מהשורה השנייה (2) של קובץ myfile.txt. החלף (s) את המילה test2 במילה test2_changed. כתוב את השינויים (>) לקובץ חדש בשם myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. לבסוף, הרץ את פקודת ה-cat הבאה כדי להציג את תוכן קובץ myfile_changed.txt.

cat myfile_changed.txt

כפי שאתה יכול לראות למטה, השורה השנייה של קובץ myfile.txt הוחלפה ב-test2_changed, בעוד שכל שאר השורות נשמרו ללא שינוי.

Verifying the changed string on a specific line

הפלט של שורות המחרוזות ששונו באופן בלעדי

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

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

  • אפשרות -n אומרת ל-sed להפסיק את ההתנהגות ברירת המחדל של הדפסת כל שורה.
  • הדגל p אומר ל־sed להדפיס את תוצאת הפקודה.
sed -n 's/pattern/replacement/p' input_file output_file

פתח את קובץ myfile.txt שלך והחלף את התוכן בהתאם למטה. שים לב שהשורה השנייה אינה נכונה מאחר והמילה first צריכה להיות second.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

כעת, הפעל את הפקודה של sed להחלפת המחרוזת first ב־second בשורה השנייה (2) של myfile.txt, אך הדפס רק את השורות המשונות (p).

sed -n '2 s/first/second/p' myfile.txt

תראה את תוצאת השורה השנייה המשונת רק בטרמינל שלך, כפי שמוצג למטה.

Outputting changed lines exclusively

מסקנה

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

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

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

Source:
https://adamtheautomator.com/sed-examples/