केवल एक आदेश के साथ फ़ाइलों के अंदर पाठ को बदलें: पर्ल

कुछ अवसरों पर हम किसी फ़ाइल के भीतर पाठ को बदलना चाहते हैं, उदाहरण के लिए, इसमें परिवर्तन करें दस्तावेज़ वह सब कुछ जो "मेरा परिवार" कहता है "हमें।" इसे प्राप्त करने के लिए हम अपने पसंदीदा टेक्स्ट एडिटर (केट, गेडिट, सबलाइमटेक्स्ट आदि) का उपयोग कर सकते हैं, लेकिन वेरिएंट को जानना हमेशा अच्छा होता है, उसी परिणाम को प्राप्त करने के अन्य तरीके use

ऐसा होता है नियमित अभिव्यक्ति यह हासिल किया जा सकता है, sed कमांड बस शानदार है, इसमें अंतहीन वेरिएंट और विकल्प हैं लेकिन ... उन लोगों के लिए जो केवल टेक्स्ट से बदलना चाहते हैं कम से कम जटिल तरीका संभव है, उनके लिए यह है कि मैं यह बहुत सरल संस्करण लाती हूं:

उदाहरण के बाद, हमारे पास फ़ाइल है दस्तावेज़ में स्थित है $ 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

कमांड थोड़ा जटिल लग सकता है, चलो इसे थोड़ा नीचे तोड़ दें और इसे थोड़ा और सरल तरीके से समझाएं

  • पर्ल : हम क्या उपयोग करेंगे, पर्ल
  • -पि : Pí, कैसे π (अनुमानित मूल्य 3.14)
  • -e : E ने इसके लिए «e को निष्पादित करने की कल्पना की» ^ - ^
  • फिर में बोली » हम एक के साथ खुला s और हम एक के साथ करीब है जी: "एसजी" … गेम ओवर Imagine के लिए स्टार्ट और जी के लिए एस की कल्पना करें
  • के बीच मुड़ें sg हमें कोष्ठक के दो सेट लगाने चाहिए: [] y [], इस तरह से: "एस [] [] जी"
  • जैसा कि मैंने ऊपर कहा था, पहले कोष्ठक के अंदर, वह पाठ जिसे हम हटाना चाहते हैं और एक नए के साथ प्रतिस्थापित करना चाहते हैं, जबकि दूसरे कोष्ठक के दूसरे सेट में उदाहरण के बाद नया पाठ जाएगा। "एस [मेरा परिवार] [हम] जी"

सरल है ना?

स्पष्टीकरण वास्तव में कमांड के लिए आवश्यक है की तुलना में बहुत अधिक व्यापक है, यह समझने में काफी सरल है more

पर्ल बहुत कुछ है, पाठ को बदलने के लिए सिर्फ एक तरीका है, यह एक पूरी भाषा है

यदि आप इसके बारे में अधिक जानना चाहते हैं, तो पैकेज स्थापित करें पर्ल-डॉक और यह क्या अनुमति देता है पर एक नज़र रखना, यह सिर्फ एक अलग ब्रह्मांड है।

वैसे और बंद करने के लिए, यह मानते हुए कि आप उन सभी .txt फ़ाइलों को ढूंढना चाहते हैं जो आपके पास $ HOME / दस्तावेज / हैं और हर एक में "मेरे परिवार" को "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. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   बूम कहा

    ठीक है, मुझे लगता है कि हम में से कई लोग sed कमांड जानते हैं, जो एक ही उद्देश्य को पूरा करता है, यह इसे बहुत बेहतर करता है और उपयोग करने में आसान है ...

    1.    KZKG ^ गारा कहा

      आपके कमेंट के लिए धन्यवाद,
      सिर्फ दो विवरण, आप यह क्यों कहते हैं कि सेड बेहतर बनाता है? क्या वास्तव में इतने सारे 'अजीब' पात्रों के साथ उपयोग करना आसान है?

  2.   फेडेरिको ए। वाल्डेस तौजाग कहा

    सभी के लिए शुभकामनाएं!!!। मैंने कमांड का उपयोग किया है प्यास, और पर्ल के साथ यहाँ वर्णित विधि सरल है। धन्यवाद KZKG ^ Gaara !!!

    1.    KZKG ^ गारा कहा

      टिप्पणी के लिए धन्यवाद 🙂
      ठीक है, कम से कम मुझे ऐसा लगता है कि यह नियमित अभिव्यक्तियों की तुलना में सरल है ... इतने सारे 'अजीब' पात्रों के साथ, कुछ समझने और जानने के लिए वास्तव में जटिल है, गैर-प्रेमी के लिए किया जा सकता है।

      1.    गिस्कार्ड कहा

        वहाँ एक «पुराने» वहाँ से बाहर है: «मैं एक समस्या थी, मैं नियमित रूप से अभिव्यक्ति का उपयोग करने का फैसला किया ... अब मैं दो समस्याओं का सामना करना पड़ा है -»

        1.    KZKG ^ गारा कहा

          HAHAHAHAHAHAH !!!
          नियमित अभिव्यक्ति एक निश्चित बिंदु पर हमारे जीवन को बचा सकती हैं ... हाँ, यह सीखने में लंबा समय लगता है कि उनका उपयोग कैसे करना है और कोशिश करना नहीं मरना है।

          अगर मैं इस आदेश को वर्षों पहले जानता था, तो जीओडी !! मेरा जीवन कितना सरल था have

          1.    गिस्कार्ड कहा

            स्पष्ट! अच्छी तरह से संभाला वे बहुत शक्तिशाली हैं better पाठ में हेरफेर करने के लिए बेहतर कुछ भी नहीं है। लेकिन कभी-कभी, जैसा कि आप पर्ल के साथ इस मामले में कहते हैं, आपको उस जगह तक जाने की ज़रूरत नहीं है अगर एक प्रतिस्थापन पर्याप्त है।
            मैंने वैसे भी अजगर का उपयोग किया होगा :)

    2.    घनाकार कहा

      लेकिन प्यास में मैं इसे और भी सरल देखता हूं ... क्या मैं कुछ गलत कर रहा हूं?

      sed -i "if / what-I-want-to-change / new-put-put /" file-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.    गिस्कार्ड कहा

            मुझे ये पोस्ट बहुत पसंद हैं जहाँ हम सभी कुछ सीखते हैं we
            मुझे नहीं पता था कि या तो।

  3.   कच्चे बुनियादी कहा

    मैं सीधे vi का उपयोग करना पसंद करता हूं।

    की तरह सरल:
    :% s / us / मेरा परिवार / g

    % -> संपूर्ण दस्तावेज़
    s -> खोज
    जी -> सभी घटनाएँ

    नमस्ते ..

    1.    KZKG ^ गारा कहा

      ग्रेसियस!
      मुझे नहीं पता कि यह कैसे करना है

  4.   str0rmt4il कहा

    पसंदीदा में जोड़ा गया!

    ग्रेसियस!

  5.   n3तूफान कहा

    यदि आपके पास rpl कमांड के लिए कुछ समय है तो देख लें

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

  6.   दुरजन कहा

    शानदार प्रविष्टि! यदि कोई भी रुचि रखता है, तो लिनक्स सेड कमांड के साथ ही: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    संदेह करनेवाला कहा

      और क्या होगा अगर फ़ाइल के भीतर जो मैं बदलना चाहता हूं वह उद्धरण है?
      उदाहरण यह बताता है कि पाठ क्या कहता है: »1 what पाठ द्वारा:» 2:
      कमांड कैसा होगा?

  7.   पर्सी सलागाडो कहा

    नमस्ते

    मैं एक स्ट्रिंग को बदलना चाहता था जिसमें बीच में एक @ था और केवल हस्ताक्षर के पहले पाठ को बदल दिया।

    बदलने के लिए पाठ: लंबे समय तक पेरू
    नया पाठ: चिरायु mi patria @percysalgado
    दिखाया: लंबे समय तक मेरी मातृभूमि रहते हैं

    आपकी मदद के लिए धन्यवाद

  8.   गुमनाम कहा

    "\" आपको दोहरे उपयोग @, # के साथ वर्णों से पहले स्लैश का उपयोग करना चाहिए, ताकि उन्हें पाठ के रूप में व्याख्या की जाए।

  9.   गाबा कहा

    और मैं इसे विंडोज़ में कैसे करूँ ????