Bash:
עריכת קבצים במקום עם שורות פקודה חד-שורתיות
איך לעשות:
כאשר מדובר בעריכת קבצים במקום באמצעות Bash, שני כלים בולטים באים לפעולה: sed
ו-awk
. בואו נבחן כיצד להשתמש בכלים החזקים האלה עם דוגמאות קידוד.
שימוש ב-sed
להחלפת טקסט פשוטה
הפקודה הבאה מחליפה את המופע הראשון של “text1” עם “text2” ב-file.txt
:
sed -i 's/text1/text2/' file.txt
להחלפה גלובלית (כל המופעים), הייתם מוסיפים g
בסוף:
sed -i 's/text1/text2/g' file.txt
לשינוי מספר קבצים בו זמנית:
sed -i 's/text1/text2/g' file1.txt file2.txt file3.txt
שימוש ב-awk
עבור מניפולציות מורכבות יותר
awk
הוא כלי נוסף הבולט ביכולות התכנות שלו, במיוחד שימושי לעיבוד טקסט שכרוך בנתונים מבוססי שדות.
שינוי השדה השני בכל שורה ל-newValue
ב-data.csv
, מופרד בפסיקים:
awk -i inplace -F, '{$2="newValue"; print $0}' OFS=, data.csv
גיבוי לפני הקפיצה
עצה מעשית אחת: תמיד תיצרו גיבוי לפני עריכה במקום. sed
מקל על כך עם אופציית ה--i
הבאה אחרי סיומת כדי ליצור גיבוי.
sed -i.bak 's/text1/text2/g' file.txt
פקודה זו יוצרת גיבוי של file.txt
המקורי כ-file.txt.bak
לפני ביצוע ההחלפה.
צלילה עמוקה
היכולת לערוך קבצים ישירות משורת הפקודה התפתחה כצעד הגיוני בהתקדמות פילוסופיית Unix: לאפשר למשתמשים לנהל ולטפל בנתונים בצורה יעילה עם כמה שפחות לחיצות מקשים. עם זאת, הכוח הזה בא עם מגבלותיו.
הקשר ההיסטורי
כלים כמו sed
ו-awk
קיימים מראשית ימי Unix, נוצרו כחלק מפילוסופיית הערכת הכלים שלה, עם דגש על פקודות מתמחות, שניתן לשלבן. הכללתם בנשקיה של Unix הייתה תגובה לצורך בעיבוד טקסט יעיל בנוף ששלטו בו ממשקים מבוססי שורת פקודה.
חלופות
אף על פי ש-sed
ו-awk
חזקים, הם לא האפשרויות היחידות. Perl ו-Python, לדוגמה, מציעים אפשרויות שורת פקודה (-p
ו--i
, בהתאמה) שמאפשרות יכולות עריכה במקום דומות עם תחביר שנתפס כקריא יותר לפעולות מורכבות.
perl -pi -e 's/text1/text2/g' file.txt
python -c "import fileinput, sys; [sys.stdout.write(line.replace('text1', 'text2')) for line in fileinput.input(files='file.txt', inplace=True)]"
לכל חלופה יתרונותיה: היכולות הרבות של Perl לכתוב בשורה אחת הן עצומות, ותחביר Python נתפס כנגיש יותר לאלו שלא מבינים עמוקות בכלים לעיבוד טקסט מבוסס Unix.
פרטי יישום
עריכה במקום לא באמת “במקום” במובן הטכני. גם sed -i
וגם awk -i inplace
פועלים על ידי יצירת קובץ זמני שבו הפלט המעובד מאוחסן לפני שהוא מחליף את הקובץ המקורי. גישה זו מבטיחה שהקובץ לא יתקלקל במידה והתהליך יופסק. ההשלכות הן בעיקר על משאבים והרשאות: עליכם להיות בעלי מספיק מקום בדיסק לקובץ הזמני וההרשאות ליצירת קבצים בתיקיית הקובץ המטרה שלכם.
למרות שפקודות עריכה במקום חזקות, יש להשתמש בהן בזהירות. regex מוטעה יכול להביא לאובדן נתונים, דבר המדגיש את חשיבות הגיבויים. למרות הפיתוחים הפוטנציאליים, שליטה בפקודות הללו יכולה לשפר משמעותית את היכולת שלכם לבצע שינויים מהירים ויעילים בקבצים ישירות משורת הפקודה, מתוך חיזוק פילוסופיית Unix של השתמשות בכלים פשוטים אך חזקים להשגת משימות מורכבות.