בהזדמנויות מסוימות אנו רוצים להחליף טקסט בתוך קובץ, למשל שינוי ב- Document.txt כל מה ש"משפחתי "אומר עבורנו. כדי להשיג זאת אנו יכולים להשתמש בעורך הטקסט המועדף עלינו (קייט, גדית, סובלימטקסט וכו ') אך תמיד טוב לדעת גרסאות, דרכים אחרות להשיג אותה תוצאה 🙂
זה קורה שעם ביטויים קבועים אתה יכול להשיג זאת, הפקודה sed פשוט מפוארת, יש לה אינסוף וריאציות ואפשרויות אבל ... למי שרק רוצה להחליף טקסט הדרך הפחות מורכבת האפשריתמבחינתם אני מביא את הגרסה הרבה יותר פשוטה:
בעקבות הדוגמה יש לנו את הקובץ Document.txt ממוקם $ HOME / Document.txt עם הטקסט הבא:
(...) המשפחה שלי זה כמו כולם, כמו שלך או של השכן שלך. למעשה המשפחה שלי אנו מנסים להיות אנשים אחראיים ובעיני החברה, תקינים פוליטית וחברתית. עם זאת, בביתי יש כבשה שחורה, וזה התפקיד שלי LOL!. תמיד הייתי זה שלא מפחד להגיד מה הוא חושב (גם אם זה כנראה לא נכון בעיני החברה), אם כי במציאות למשפחה שלי נמאס מה
עפרהחברה של ימינו.
עם הפקודה הבאה תשנה «המשפחה שלי" על ידי "לנו":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
זה כל כך פשוט 🙂
אז הטקסט יהיה:
(...) לנו זה כמו כולם, כמו שלך או של השכן שלך. למעשה לנו אנו מנסים להיות אנשים אחראיים ובעיני החברה, תקינים פוליטית וחברתית. עם זאת, בביתי יש כבשה שחורה, וזה התפקיד שלי LOL!. תמיד הייתי זה שלא מפחד להגיד מה הוא חושב (גם אם זה כנראה לא נכון בעיני החברה), אם כי במציאות למשפחה שלי נמאס מה
עפרהחברה של ימינו.
התחביר הוא:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
הפקודה עשויה להיראות מעט מורכבת, בואו נפרק אותה קצת ונסביר אותה קצת יותר פשוט 😉
- פרל : במה נשתמש, פרל
- -פאי : פי, איך π (הערך המשוער של 3.14)
- -e : ה- E דמיין את זה לביצוע "e" ^ - ^
- ואז במרכאות » אנחנו פותחים עם s ואנחנו סוגרים עם g: "sg" ... תאר לעצמך את ה- S עבור Start ו- G עבור Game Over 😀
- פנה בין ה- sg עלינו לשים שתי קבוצות סוגריים: [] y [], להיות ככה: "S [] [] g"
- בתוך הסוגריים הראשונים כפי שאמרתי לעיל, הטקסט שאנו רוצים להסיר ולהחליף בטקסט חדש יעבור, ואילו בקבוצת הסוגריים השנייה הטקסט החדש לשים ילך, בעקבות הדוגמה: "S [המשפחה שלי] [we] g"
פשוט לא?
ההסבר הוא למעשה הרבה יותר נרחב ממה שנחוץ לפקודה, זה די פשוט להבין 🙂
פרל היא הרבה, הרבה יותר מסתם דרך להחליף טקסט, זו שפה שלמה 😉
אם אתה רוצה ללמוד עוד על זה, התקן את החבילה פרל-דוק ותסתכל מי יודע מה זה מאפשר, זה פשוט יקום אחר.
אגב ולסגור, בהנחה שתרצה למצוא את כל קבצי ה- .txt שיש לך ב- $ HOME / Documents / ובכל אחד להחליף את "המשפחה שלי" ב"אנחנו ", אתה יכול להצטרף ל- find + perl כדי להשיג זאת:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
או באמצעות תו כללי:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
הבעיה בגרסה השנייה הזו היא שהיא לא תחליף בקבצים שנמצאים בתיקיות משנה 🙂
בכל מקרה, אני מקווה שמצאת את זה מעניין. מבחינתי זה היה ממש שימושי, אני כבר יכול להחליף טקסט ישירות מהטרמינל ... נהדר! 😀
ובכן, אני חושב שרבים מאיתנו כאן מכירים את הפקודה sed, שמשרתת את אותה מטרה, היא עושה את זה הרבה יותר טוב וקל יותר לשימוש ...
תודה על תגובתך,
רק שני פרטים, למה אתה אומר ש- sed משפר את זה? האם זה באמת קל יותר לשימוש עם כל כך הרבה דמויות 'מוזרות'?
ברכות לכולם!!!. השתמשתי בפקודה צמא, והשיטה המתוארת כאן עם פרל פשוטה יותר. תודה KZKG ^ גאארה !!!.
תודה על התגובה 🙂
ובכן, לפחות בעיני זה נראה פשוט יותר מביטויים רגילים ... שעם כל כך הרבה דמויות 'מוזרות', אפשר לעשות משהו מורכב להבין וללמוד למי שאינו מתמצא.
יש פתגם "ישן" שם: "הייתה לי בעיה, החלטתי להשתמש בביטויים רגולריים ... עכשיו יש לי שתי בעיות" 😉
HAHAHAHAHAHAHA !!!
ביטויים רגולריים יכולים להציל את חיינו בשלב מסוים ... כן, לוקח הרבה זמן ללמוד כיצד להשתמש בהם ולא למות בניסיון.
אם הייתי מכיר את הפקודה הזו לפני שנים, אלוהים !! כמה החיים שלי היו פשוטים 😀
ברור! מטופלים היטב הם חזקים מאוד 🙂 שום דבר טוב יותר לתפעל טקסט. אבל לפעמים, כמו שאתה אומר במקרה הזה עם פרל, אתה לא צריך להגיע כל כך רחוק אם מספיק להחליף.
בכל מקרה הייתי משתמש בפייתון :)
אבל בצמא אני רואה את זה פשוט עוד יותר ... האם אני עושה משהו לא בסדר?
sed -i "אם / מה-אני רוצה לשנות / חדש לשים /" קובץ-באיזה להחליף
he he ... ואם אני רוצה להחליף את "http://my.blog.com/content/" ב- "http://my.blog.com/uploads/files/" 😀 ... כבר שם אתה צריך לשים \ עם רווחים ואחרים , וזה הופך להיות מורכב או לא?
אין חובה להשתמש / כמפריד. חפש עם +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» קובץ
O_O ... WTF!
פתחת עבורי יקום שלם של אפשרויות .. O_O
אני אוהב את הפוסטים האלה שבהם כולנו לומדים משהו 🙂
גם לא ידעתי את זה.
אני מעדיף להשתמש ישירות ב ..
פשוט כמו:
:% s / us / המשפחה שלי / g
% -> כל המסמך
s -> חיפוש
g -> כל ההתרחשויות
ברכות ..
תודה!
לא ידעתי איך לעשות את זה עם vi
נוסף למועדפים!
תודה!
בדוק אם יש לך קצת את הפקודה rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
כניסה נהדרת! אם מישהו מעוניין, אותו הדבר עם הפקודה Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
ומה קורה אם בתוך הקובץ מה שאני רוצה להחליף מכיל ציטוטים?
דוגמה להחליף את מה שאומר טקסט: »1 ″ לפי טקסט:» 2 ″
איך תהיה הפקודה?
שלום
רציתי להחליף מחרוזת שהיתה @ באמצע ושיניתי רק את הטקסט לפני ה- at.
טקסט לשינוי: יחי פרו
טקסט חדש: Viva mi patria @ percysalgado
מוצג: תחי מולדתי
תודה על עזרתך
"\" עליך להשתמש ב קו נטוי לפני התווים עם שימוש כפול @, #, כך שיתפרשו כטקסט.
ואיך אני עושה את זה בחלונות ????