Davy Jones - Theme
תוכן עניינים:
לעתים קרובות למדי כשעבודה עם קבצי טקסט תצטרך למצוא ולהחליף מחרוזות טקסט בקובץ אחד או יותר.
sed
הוא ספר מובהק. זה יכול לבצע מניפולציות טקסט בסיסיות על קבצים וזרמי קלט כגון צינורות. בעזרת
sed
תוכלו לחפש, למצוא ולהחליף, להוסיף ולמחוק מילים ושורות. זה תומך בביטויים רגילים מורחבים המאפשרים התאמה לדפוסים מורכבים.
, נדבר על איך למצוא ולהחליף מיתרים
sed
. אנו נראה לך כיצד לבצע חיפוש רקורסיבי ולהחליף אותו.
מצא והחלף מחרוזת
sed
ישנן כמה גרסאות של
sed
, עם כמה הבדלים פונקציונליים ביניהם. macOS משתמש בגירסת BSD ורוב ההפצות לינוקס מגיעות עם GNU
sed
המותקן מראש כברירת מחדל. אנו נשתמש בגרסת ה- GNU.
הצורה הכללית של חיפוש והחלפת טקסט באמצעות
sed
מהצורה הבאה:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- כברירת מחדל כותבsed
את הפלט שלו לפלט הסטנדרטי. אפשרות זו מורה ל-sed
לערוך קבצים במקום. אם מסופק סיומת (ex -i.bak) ייווצר גיבוי של הקובץ המקורי.s
- פקודת התחליף, כנראה הפקודה המשמשת ביותר ב- sed./ / /
- אופי תוחם. זה יכול להיות כל תו, אך בדרך כלל משתמשים בתו הקצץ (/
).SEARCH_REGEX
- מחרוזת רגילה או ביטוי רגיל לחיפוש. החלפה - מחרוזת ההחלפה.g
- דגל חלופי גלובלי. כברירת מחדל,sed
קורא את הקובץ שורה אחר שורה ומשנה רק את המופע הראשון שלSEARCH_REGEX
בשורה. כאשר מסומן הדגל החלופי, כל המופעים יוחלפו.INPUTFILE
- שם הקובץ עליו ברצונך להריץ את הפקודה.
זה שיטה טובה לשים ציטוטים סביב הוויכוח כך שתאי הדמויות של הקונכיות לא יתרחבו.
בוא נראה דוגמאות כיצד להשתמש בפקודת
sed
כדי לחפש ולהחליף טקסט בקבצים בכמה מהאפשרויות והדגלים הנפוצים ביותר שלה.
לצורך הפגנה אנו נשתמש בקובץ הבא:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
כאשר הדגל החלופי הגלובלי
sed
מחליף את כל המופעים של דפוס החיפוש:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
כפי שוודאי שמתם לב, בדוגמה הקודמת מוחלף גם
foo
המחרוזת בתוך מחרוזת
foobar
. אם זו לא ההתנהגות המבוקשת, השתמש בביטוי גבול המילה (
\b
) בשני קצוות מחרוזת החיפוש. זה מבטיח שהמילים החלקיות אינן תואמות.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
כדי להפוך את התאמת התבנית לבלתי רגישה, השתמש בסמל I. בדוגמה למטה אנו משתמשים בדגלי ה-
g
וגם
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
האפשרות הקלה והקראה הרבה יותר היא להשתמש בתו תוחם אחר. רוב האנשים משתמשים בסרגל האנכי (
|
) או במעי הגס (:) אך אתה יכול להשתמש בכל תו אחר:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
אתה יכול גם להשתמש בביטויים רגילים. לדוגמה כדי לחפש בכל המספרים 3 הספרות ולהחליף אותם
number
המחרוזת שתשתמש בהם:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
מאפיין שימושי נוסף של sed הוא שתוכלו להשתמש בתו אמפרסנד ואשר מתאים לתבנית המתאימה. ניתן להשתמש בתו מספר פעמים.
לדוגמה, אם ברצונך להוסיף סד מתולתל
{}
סביב כל מספר בן שלוש ספרות, הקלד:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
אחרון חביב, תמיד כדאי לבצע גיבוי בעת עריכת קובץ ב-
sed
. לשם כך פשוט ספק הרחבה לאפשרות
-i
. לדוגמה, כדי לערוך את
file.txt
ולשמור את הקובץ המקורי כ
file.txt.bak
היית משתמש:
sed -i.bak 's/foo/linux/g' file.txt
ls
מצא והחלף רקורסיבי
לפעמים אתה רוצה לחפש ספריות באופן רקורסיבי אחר קבצים המכילים מחרוזת ולהחליף את המחרוזת בכל הקבצים. ניתן לעשות זאת באמצעות פקודות כגון
find
או
grep
כדי למצוא רקורסיבית קבצים בספריה וצנרת שמות הקבצים ל-
sed
.
הפקודה הבאה תחפש רקורסיבית קבצים בספריית העבודה הנוכחית ותעביר את שמות הקבצים ל-
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
כדי להימנע מבעיות עם קבצים המכילים מקום בשמם, השתמשו באפשרות
-print0
find
להדפיס את שם הקובץ, ואחריו תו null וצנרת את הפלט ל-
sed
באמצעות
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
כדי לא לכלול ספריה השתמש באפשרות-
-not -path
. לדוגמה, אם אתה מחליף מחרוזת ברשימות ה- git המקומיות שלך כדי לא לכלול את כל הקבצים המתחילים בנקודה (
.
), השתמש ב:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
אפשרות נוספת היא להשתמש בפקודה
grep
כדי למצוא רקורסיבית את כל הקבצים המכילים את תבנית החיפוש ואז לצנוב את שמות הקבצים ל-
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
סיכום
למרות שזה אולי נראה מורכב ומורכב, בהתחלה, חיפוש והחלפת טקסט בקבצים ב-
sed
הוא פשוט מאוד.
למידע נוסף על פקודות
sed
, אפשרות ודגלים בקר במדריך ה- GNU sed וב- Grymoire sed הדרכה. אם יש לך שאלות או משוב, אל תהסס להשאיר תגובה.
כיצד להשתמש ב- OneDrive? למד כיצד להוסיף, להעלות, לאחסן, ליצור, להשתמש בקבצים, בתמונות ובתיקיות ובסנכרון תיקיות משותפות ב- OneDrive באמצעות מחשב Windows.
קיימות מספר אפשרויות אחסון בענן זמין באינטרנט, אך אולי אחת נוח מהם הוא
כיצד להשתמש בפייסבוק למצוא wifi כדי למצוא נקודות חמות חינם
להלן הוראות מהירות על הפיצ'ר החדש של Find Find WiFi כדי למצוא נקודות חמות חינמיות. תבדוק את זה!
כיצד לבדוק אם מחרוזת מכילה מחרוזת בתחתית
אחת הפעולות הנפוצות ביותר בעבודה עם מחרוזות בבש היא לקבוע אם מחרוזת מכילה מחרוזת אחרת או לא. במאמר זה נראה לך מספר דרכים לבדוק אם מחרוזת מכילה מחרוזת.