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

לפעמים אנחנו רוצים להחליף טקסט בתוך קובץ, למשל, לשנות כל מה שאומר "המשפחה שלי" ל"אנחנו" בקובץ Document.txt . לשם כך, נוכל להשתמש בעורך הטקסט המועדף עלינו (Kate, Gedit, Sublime Text וכו'), אבל תמיד טוב להכיר חלופות, דרכים אחרות להשיג את אותה התוצאה.

מסתבר שעם ביטויים רגולריים ניתן להשיג זאת; הפקודה `sed` פשוט נהדרת, יש לה אינספור וריאציות ואפשרויות, אבל... עבור אלו שרוצים להחליף טקסט רק בצורה הכי פחות מורכבת שאפשר , אני מביא לכם את הגרסה הפשוטה הרבה יותר הזו:

בהתאם לדוגמה, יש לנו את הקובץ Document.txt הממוקם בקובץ $HOME/Document.txt עם הטקסט הבא:

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

הפקודה הבאה תשנה את " המשפחה שלי " ל-" אנחנו ":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

זה כל כך פשוט 

אז הטקסט יהיה:

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

התחביר הוא:

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 להתחלה ואת ה-G ל-Game Over 
  • פנה בין ה- sg עלינו לשים שתי קבוצות סוגריים: [] y [], להיות ככה: "S [] [] g"
  • בתוך הסוגריים הראשונים כפי שאמרתי לעיל, הטקסט שאנו רוצים להסיר ולהחליף בטקסט חדש יעבור, ואילו בקבוצת הסוגריים השנייה הטקסט החדש לשים ילך, בעקבות הדוגמה: "S [המשפחה שלי] [we] g"

פשוט לא?

ההסבר למעשה ארוך בהרבה ממה שצריך לפקודה, די פשוט להבנה 

Perl היא הרבה הרבה יותר מדרך להחליף טקסט, היא שפה שלמה 

אם אתם רוצים ללמוד עוד על כך, התקינו את חבילת perl-doc והסתכלו על כל מה שהיא מאפשרת; זה פשוט יקום אחר.

אגב ולסגור, בהנחה שתרצה למצוא את כל קבצי ה- .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

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

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


הוסף כמקור מועדף בגוגל