במדריך זה, נציג את החלפת שורות חדשות בחלל באמצעות 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 למתחילים .