החלף טקסט בתוך קבצים בפקודה אחת בלבד: perl

בהזדמנויות מסוימות אנו רוצים להחליף טקסט בתוך קובץ, למשל שינוי ב- 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

הבעיה בגרסה השנייה הזו היא שהיא לא תחליף בקבצים שנמצאים בתיקיות משנה 🙂

בכל מקרה, אני מקווה שמצאת את זה מעניין. מבחינתי זה היה ממש שימושי, אני כבר יכול להחליף טקסט ישירות מהטרמינל ... נהדר! 😀


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   בּוּם דיג'ו

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

    1.    KZKG ^ גאארה דיג'ו

      תודה על תגובתך,
      רק שני פרטים, למה אתה אומר ש- sed משפר את זה? האם זה באמת קל יותר לשימוש עם כל כך הרבה דמויות 'מוזרות'?

  2.   פדריקו א 'ולדס טוג'אג דיג'ו

    ברכות לכולם!!!. השתמשתי בפקודה צמא, והשיטה המתוארת כאן עם פרל פשוטה יותר. תודה KZKG ^ גאארה !!!.

    1.    KZKG ^ גאארה דיג'ו

      תודה על התגובה 🙂
      ובכן, לפחות בעיני זה נראה פשוט יותר מביטויים רגילים ... שעם כל כך הרבה דמויות 'מוזרות', אפשר לעשות משהו מורכב להבין וללמוד למי שאינו מתמצא.

      1.    גיסקארד דיג'ו

        יש פתגם "ישן" שם: "הייתה לי בעיה, החלטתי להשתמש בביטויים רגולריים ... עכשיו יש לי שתי בעיות" 😉

        1.    KZKG ^ גאארה דיג'ו

          HAHAHAHAHAHAHA !!!
          ביטויים רגולריים יכולים להציל את חיינו בשלב מסוים ... כן, לוקח הרבה זמן ללמוד כיצד להשתמש בהם ולא למות בניסיון.

          אם הייתי מכיר את הפקודה הזו לפני שנים, אלוהים !! כמה החיים שלי היו פשוטים 😀

          1.    גיסקארד דיג'ו

            ברור! מטופלים היטב הם חזקים מאוד 🙂 שום דבר טוב יותר לתפעל טקסט. אבל לפעמים, כמו שאתה אומר במקרה הזה עם פרל, אתה לא צריך להגיע כל כך רחוק אם מספיק להחליף.
            בכל מקרה הייתי משתמש בפייתון :)

    2.    מטלטל דיג'ו

      אבל בצמא אני רואה את זה פשוט עוד יותר ... האם אני עושה משהו לא בסדר?

      sed -i "אם / מה-אני רוצה לשנות / חדש לשים /" קובץ-באיזה להחליף

      1.    KZKG ^ גאארה דיג'ו

        he he ... ואם אני רוצה להחליף את "http://my.blog.com/content/" ב- "http://my.blog.com/uploads/files/" 😀 ... כבר שם אתה צריך לשים \ עם רווחים ואחרים , וזה הופך להיות מורכב או לא?

        1.    מטלטל דיג'ו

          אין חובה להשתמש / כמפריד. חפש עם +

          sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» קובץ

          1.    KZKG ^ גאארה דיג'ו

            O_O ... WTF!
            פתחת עבורי יקום שלם של אפשרויות .. O_O

          2.    גיסקארד דיג'ו

            אני אוהב את הפוסטים האלה שבהם כולנו לומדים משהו 🙂
            גם לא ידעתי את זה.

  3.   RAW-Basic דיג'ו

    אני מעדיף להשתמש ישירות ב ..

    פשוט כמו:
    :% s / us / המשפחה שלי / g

    % -> כל המסמך
    s -> חיפוש
    g -> כל ההתרחשויות

    ברכות ..

    1.    KZKG ^ גאארה דיג'ו

      תודה!
      לא ידעתי איך לעשות את זה עם vi

  4.   st0rmt4il דיג'ו

    נוסף למועדפים!

    תודה!

  5.   סופת n3 דיג'ו
  6.   DuranG דיג'ו

    כניסה נהדרת! אם מישהו מעוניין, אותו הדבר עם הפקודה Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    מֵטִיל סָפֵק דיג'ו

      ומה קורה אם בתוך הקובץ מה שאני רוצה להחליף מכיל ציטוטים?
      דוגמה להחליף את מה שאומר טקסט: »1 ″ לפי טקסט:» 2 ″
      איך תהיה הפקודה?

  7.   פרסי סאלאדו דיג'ו

    שלום

    רציתי להחליף מחרוזת שהיתה @ באמצע ושיניתי רק את הטקסט לפני ה- at.

    טקסט לשינוי: יחי פרו
    טקסט חדש: Viva mi patria @ percysalgado
    מוצג: תחי מולדתי

    תודה על עזרתך

  8.   אנונימי דיג'ו

    "\" עליך להשתמש ב קו נטוי לפני התווים עם שימוש כפול @, #, כך שיתפרשו כטקסט.

  9.   גאבא דיג'ו

    ואיך אני עושה את זה בחלונות ????