Sed החלף את השורה החדשה ברווח

Sed Hhlp T Hswrh Hhdsh Brwwh



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

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

שימוש ב-sed להחלפת טקסט

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







$ sed -e 's///'

תסתכל על הפקודה הבאה:



$ echo 'השועל החום המהיר' | sed -e 's/quick/fast/g'



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





החלפת שורות חדשות בחלל

לצורך הדגמה, יצרתי את קובץ הטקסט הבא test.txt עם מספר תוכן דמה:

$ cat test.txt



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

$ sed -e 's/\n/ /g' test.txt

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

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

לפקודת sed יש מספר חלקים; כל אחד מציין משימה ספציפית:

  • :a: יוצר תווית 'a'
  • N: מוסיף את השורה הבאה למרחב התבנית
  • $!ba: אם לא השורה האחרונה, חוזר לתווית 'a'
  • s/\n/ /g: מוצא ומחליף שורה חדשה (\n) ברווח (/ /). הדפוס מותאם באופן גלובלי (/g)

הפקודה sed עוברת בלולאה דרך השלבים עד שהיא מגיעה לשורה האחרונה, ומחליפה את כל התווים \n ברווח.

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

$ sed -z -e 's/\n/ /g' test.txt

שיטות אלטרנטיביות

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

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

$ tr '\n' ' ' < test.txt

אנחנו יכולים גם להשתמש ב-perl כדי לבצע את העבודה. התחביר הבא דומה גם למה שהשתמשנו עם sed (אך מפושט):

$ perl -p -e 's/\n/ /' test.txt

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

$ paste -s -d ' ' test.txt

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

$ awk 1 ORS=' ' test.txt

סיכום

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

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