استبدل النص داخل الملفات بأمر واحد فقط: perl

في مناسبات معينة ، نريد استبدال النص داخل ملف ، على سبيل المثال ، التغيير في Document.txt كل ما تقوله "عائلتي" "لنا". لتحقيق ذلك ، يمكننا استخدام محرر النصوص المفضل لدينا (Kate ، Gedit ، SublimeText ، إلخ) ولكن من الجيد دائمًا معرفة المتغيرات والطرق الأخرى لتحقيق نفس النتيجة 🙂

يحدث ذلك مع التعبيرات العادية يمكنك تحقيق ذلك ، فالأمر 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 لبداية و G لـ Game Over 😀
  • بدوره بين sg يجب أن نضع مجموعتين من الأقواس: [] y []، على هذا النحو: "S [] [] g"
  • داخل الأقواس الأولى كما قلت أعلاه ، سيظهر النص الذي نريد إزالته واستبداله بآخر جديد ، بينما في المجموعة الثانية من الأقواس ، سيظهر النص الجديد المراد وضعه ، باتباع المثال: "S [عائلتي] [نحن] ز"

بسيط أليس كذلك؟

التفسير هو في الواقع أكثر شمولاً مما هو ضروري للأمر ، فمن السهل جدًا فهم 🙂

Perl هي أكثر بكثير من مجرد وسيلة لاستبدال النص ، إنها لغة كاملة 😉

إذا كنت تريد معرفة المزيد عنها ، فقم بتثبيت الحزمة بيرل-وثيقة وإلقاء نظرة على ما يسمح به ، إنه مجرد كون مختلف.

بالمناسبة وللإغلاق ، بافتراض أنك تريد العثور على جميع ملفات .txt التي لديك في $ HOME / Documents / وفي كل منها استبدل "عائلتي" بـ "us" ، يمكنك الانضمام إلى 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 (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   ازدهار قال

    حسنًا ، أعتقد أن الكثيرين منا هنا يعرفون الأمر sed ، والذي يخدم نفس الغرض ، فهو يفعل ذلك بشكل أفضل بكثير ويسهل استخدامه ...

    1.    KZKG ^ جارا قال

      شكرا على تعليقك،
      تفصيلان فقط ، لماذا تقول أن sed يجعلها أفضل؟ هل من الأسهل حقًا استخدامه مع العديد من الشخصيات "الغريبة"؟

  2.   فيديريكو إيه فالديس توجاغ قال

    تحياتي للجميع!!!. لقد استخدمت الأمر عطش، والطريقة الموصوفة هنا باستخدام perl أبسط. شكرا KZKG ^ Gaara !!!.

    1.    KZKG ^ جارا قال

      شكرا على التعليق 🙂
      حسنًا ، على الأقل يبدو لي أن هذا أبسط من التعبيرات العادية ... أنه مع وجود العديد من الشخصيات "الغريبة" ، يمكن فعل شيء معقد حقًا لفهمه وتعلمه لغير الأذكياء.

      1.    جيسكارد قال

        هناك قول مأثور "قديم": "واجهت مشكلة ، قررت استخدام التعبيرات العادية ... الآن لدي مشكلتان"

        1.    KZKG ^ جارا قال

          هاهاهاهاها !!!
          يمكن للتعبيرات العادية أن تنقذ حياتنا في مرحلة معينة ... نعم ، يستغرق الأمر وقتًا طويلاً لتعلم كيفية استخدامها وعدم الموت أثناء المحاولة.

          لو كنت قد عرفت هذه الوصية منذ سنوات يا الله !! كم كانت حياتي بسيطة

          1.    جيسكارد قال

            واضح! حسن التعامل معها فهي قوية جدا 🙂 لا شيء أفضل لمعالجة النص. لكن في بعض الأحيان ، كما تقول في هذه الحالة مع Perl ، لا يتعين عليك الذهاب إلى هذا الحد إذا كان الاستبدال كافياً.
            كنت سأستخدم بايثون على أي حال :)

    2.    صائد قال

      لكن في العطش أرى الأمر أبسط ... هل أقوم بشيء خاطئ؟

      sed -i "if / what-I-want-to-change / new-to-put /" file-in-which-to-replace

      1.    KZKG ^ جارا قال

        هيه هيه ... وإذا أردت استبدال "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 الأساسي قال

    أنا أفضل استخدام السادس مباشرة ..

    ببساطة:
    :٪ s / لنا / عائلتي / g

    ٪ -> المستند بأكمله
    ق -> البحث
    ز -> جميع التكرارات

    تحيات ..

    1.    KZKG ^ جارا قال

      بفضل!
      لم أكن أعرف كيف أفعل ذلك مع vi

  4.   st0rmt4il قال

    تمت الإضافة إلى المفضلة!

    بفضل!

  5.   n3 العاصفة قال

    ألقِ نظرة عليه إذا كان لديك القليل من الأمر rpl

    http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/

  6.   دوران جي قال

    إدخال رائع! في حالة اهتمام أي شخص ، نفس الشيء مع أمر Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    الشك قال

      وماذا يحدث إذا كان ما أريد استبداله داخل الملف يحتوي على علامات اقتباس؟
      مثال استبدل ما يقول النص: »1 ″ بالنص:» 2 ″
      كيف يكون الأمر؟

  7.   بيرسي سالغادو قال

    حولا

    أردت استبدال سلسلة بها علامة @ في المنتصف وقمت فقط بتغيير النص إلى ما قبل at.

    النص المطلوب تغييره: تحيا بيرو
    نص جديد: Viva mi patriapercysalgado
    ظاهر: عاش وطني

    شكرا لمساعدتكم

  8.   مجهول قال

    "\" يجب عليك استخدام الشرطة المائلة قبل الأحرف ذات الاستخدام المزدوج @ ، # ، حتى يتم تفسيرها على أنها نص.

  9.   جابا قال

    وكيف أفعل ذلك في الويندوز ؟؟؟؟