แทนที่ข้อความในไฟล์ด้วยคำสั่งเดียว: perl

ในบางโอกาสเราต้องการแทนที่ข้อความภายในไฟล์เช่นเปลี่ยนไฟล์ Document.txt ทุกสิ่งที่ "ครอบครัวของฉัน" พูดเพื่อ "เรา" เพื่อให้บรรลุสิ่งนี้เราสามารถใช้โปรแกรมแก้ไขข้อความที่เราต้องการ (Kate, Gedit, SublimeText ฯลฯ ) แต่การรู้จักตัวแปรวิธีอื่น ๆ เพื่อให้ได้ผลลัพธ์ที่เหมือนกันเป็นสิ่งที่ดีเสมอ

มันเกิดขึ้นด้วย นิพจน์ทั่วไป สิ่งนี้สามารถทำได้คำสั่ง sed นั้นงดงามมากมีรูปแบบและตัวเลือกที่ไม่มีที่สิ้นสุด แต่ ... สำหรับผู้ที่ต้องการแทนที่ข้อความจาก วิธีที่ซับซ้อนน้อยที่สุดเท่าที่จะทำได้สำหรับพวกเขาฉันนำตัวแปรที่ง่ายกว่านี้มาให้:

ตามตัวอย่างเรามีไฟล์ Document.txt ตั้งอยู่ใน $ HOME / Document.txt ด้วยข้อความต่อไปนี้:

(... ) ครอบครัวของฉัน ก็เหมือนกับพวกเขาทั้งหมดเช่นของคุณหรือของเพื่อนบ้าน ในความเป็นจริง ครอบครัวของฉัน เราพยายามที่จะเป็นคนที่มีความรับผิดชอบและในสายตาของสังคมถูกต้องทางการเมืองและสังคม อย่างไรก็ตามในบ้านของฉันมีแกะดำและนั่นคือบทบาทของฉันฮ่า ๆ ! ฉันเป็นคนหนึ่งที่ไม่กลัวที่จะพูดในสิ่งที่เขาคิดมาโดยตลอด (แม้ว่าจะไม่ถูกต้องในสายตาของสังคมก็ตาม) แม้ว่าในความเป็นจริงแล้วครอบครัวของฉันจะเบื่อหน่ายกับ สิ่งสกปรก สังคมปัจจุบัน

ด้วยคำสั่งต่อไปนี้คุณจะเปลี่ยน«ครอบครัวของฉัน"โดย"nosotros":

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

มันง่ายมาก🙂

ดังนั้นข้อความจะเป็น:

(... ) nosotros ก็เหมือนกับพวกเขาทั้งหมดเช่นของคุณหรือของเพื่อนบ้าน ในความเป็นจริง nosotros เราพยายามที่จะเป็นคนที่มีความรับผิดชอบและในสายตาของสังคมถูกต้องทางการเมืองและสังคม อย่างไรก็ตามในบ้านของฉันมีแกะดำและนั่นคือบทบาทของฉันฮ่า ๆ ! ฉันเป็นคนหนึ่งที่ไม่กลัวที่จะพูดในสิ่งที่เขาคิดมาโดยตลอด (แม้ว่าจะไม่ถูกต้องในสายตาของสังคมก็ตาม) แม้ว่าในความเป็นจริงแล้วครอบครัวของฉันจะเบื่อหน่ายกับ สิ่งสกปรก สังคมปัจจุบัน

ไวยากรณ์คือ:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

คำสั่งอาจดูซับซ้อนไปหน่อยลองแยกย่อยและอธิบายเพิ่มเติมง่ายๆ simply

  • Perl : สิ่งที่เราจะใช้ perl
  • -pi : Píอย่างไร π (ค่าประมาณ 3.14)
  • -e : E ลองนึกภาพสำหรับ« e เพื่อดำเนินการ» ^ - ^
  • จากนั้นในเครื่องหมายคำพูด » เราเปิดด้วยไฟล์ s และเราปิดด้วย g: "sg" …ลองนึกภาพ S for Start และ G สำหรับ Game Over 😀
  • เลี้ยวระหว่าง sg เราต้องใส่วงเล็บสองชุด: [] y []เป็นอย่างนั้น: "S [] [] g"
  • ในวงเล็บแรกตามที่ฉันได้กล่าวไว้ข้างต้นข้อความที่เราต้องการลบและแทนที่ด้วยข้อความใหม่จะไปในขณะที่ในวงเล็บชุดที่สองข้อความใหม่ที่จะใส่จะไปตามตัวอย่าง: "S [ครอบครัวของฉัน] [เรา] g"

เรียบง่ายใช่ไหม

จริงๆแล้วคำอธิบายนั้นครอบคลุมมากกว่าที่จำเป็นสำหรับคำสั่งมันค่อนข้างง่ายที่จะเข้าใจ🙂

Perl เป็นมากกว่าวิธีการแทนที่ข้อความเป็นภาษาทั้งหมด😉

หากคุณต้องการเรียนรู้เพิ่มเติมให้ติดตั้งแพคเกจ Perl-doc และดู whooodo สิ่งที่อนุญาตมันเป็นเพียงจักรวาลที่แตกต่างกัน

โดยวิธีการและเพื่อปิดสมมติว่าคุณต้องการค้นหาไฟล์. txt ทั้งหมดที่คุณมีใน $ HOME / Documents / และในแต่ละไฟล์แทนที่ "my family" ด้วย "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. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   บูม dijo

    ฉันคิดว่าพวกเราหลายคนที่นี่รู้จักคำสั่ง sed ซึ่งมีจุดประสงค์เดียวกันมันทำได้ดีกว่ามากและใช้งานง่ายกว่า ...

    1.    KZKG ^ กาอาระ dijo

      ขอบคุณสำหรับความคิดเห็นของคุณ
      รายละเอียดแค่สองอย่างทำไมถึงบอกว่า sed ทำให้ดีขึ้น? มันง่ายกว่าไหมที่จะใช้กับตัวละคร 'แปลก ๆ ' มากมาย?

  2.   Federico A. Valdes Toujague dijo

    สวัสดีทุกคน !!!. ฉันได้ใช้คำสั่ง ความกระหายน้ำและวิธีการที่อธิบายไว้ที่นี่ด้วย perl นั้นง่ายกว่า ขอบคุณ KZKG ^ Gaara !!!.

    1.    KZKG ^ กาอาระ dijo

      ขอบคุณสำหรับความคิดเห็น🙂
      อย่างน้อยก็ดูเหมือนว่าสำหรับฉันมันง่ายกว่านิพจน์ทั่วไป ... ด้วยตัวละครที่ 'แปลก' มากมายสิ่งที่ซับซ้อนในการทำความเข้าใจและเรียนรู้สามารถทำได้สำหรับผู้ที่ไม่เข้าใจ

      1.    กิสการ์ด dijo

        มีสุภาษิต«เก่า»อยู่ที่นั่น: «ฉันมีปัญหาฉันตัดสินใจใช้นิพจน์ทั่วไป ... ตอนนี้ฉันมีปัญหาสองอย่าง»😉

        1.    KZKG ^ กาอาระ dijo

          ฮาฮาฮาฮาฮาฮา !!!
          การแสดงออกปกติสามารถช่วยชีวิตเราได้ถึงจุดหนึ่ง ... ใช่ต้องใช้เวลานานในการเรียนรู้วิธีใช้และไม่ต้องพยายาม

          ถ้าฉันรู้คำสั่งนี้เมื่อหลายปีก่อนพระเจ้า !! ชีวิตของฉันจะเรียบง่ายแค่ไหน😀

          1.    กิสการ์ด dijo

            ชัดเจน! จัดการได้ดีมีประสิทธิภาพมาก🙂ไม่มีอะไรดีไปกว่าการจัดการข้อความ แต่บางครั้งอย่างที่คุณพูดในกรณีนี้กับ Perl คุณไม่จำเป็นต้องไปไกลขนาดนั้นหากการแทนที่เพียงพอ
            ฉันจะใช้ Python ต่อไป :)

    2.    นักล่า dijo

      แต่ในความกระหายฉันเห็นว่ามันง่ายกว่านั้น ... ฉันทำอะไรผิดหรือเปล่า?

      sed -i "ใช่ / สิ่งที่ฉันต้องการเปลี่ยน / ใหม่เพื่อใส่ /" ไฟล์ในสิ่งที่จะแทนที่

      1.    KZKG ^ กาอาระ dijo

        เฮ้เฮ้ ... และถ้าฉันต้องการแทนที่ "http://my.blog.com/content/" ด้วย "http://my.blog.com/uploads/files/" 😀 ... มีแล้ว ใส่ \ ด้วยช่องว่างและอื่น ๆ และมันจะซับซ้อนหรือไม่?

        1.    นักล่า dijo

          ไม่บังคับให้ใช้ / เป็นตัวคั่น ดูด้วย +

          sed -i « s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+ »ไฟล์

          1.    KZKG ^ กาอาระ dijo

            O_O… WTF!
            คุณได้เปิดทางเลือกมากมายให้ฉันแล้ว .. O_O

          2.    กิสการ์ด dijo

            ฉันชอบโพสต์เหล่านี้ที่เราทุกคนได้เรียนรู้บางสิ่ง🙂
            ฉันไม่รู้เหมือนกัน

  3.   RAW-พื้นฐาน dijo

    ฉันชอบใช้โดยตรง vi ..

    ง่ายเหมือน:
    :% s / us / my family / g

    % -> เอกสารทั้งหมด
    s -> ค้นหา
    g -> เหตุการณ์ทั้งหมด

    ทักทาย ..

    1.    KZKG ^ กาอาระ dijo

      ขอบคุณ!
      ไม่รู้จะทำอย่างไรกับ vi

  4.   st0rmt4il dijo

    เพิ่มในรายการโปรดแล้ว!

    ขอบคุณ!

  5.   n3พายุ dijo

    ลองดูถ้าคุณมีคำสั่ง rpl เล็กน้อย

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

  6.   Duran G dijo

    รายการเยี่ยม! ในกรณีที่ใครสนใจเช่นเดียวกันกับคำสั่ง Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    สงสัย dijo

      และจะเกิดอะไรขึ้นถ้าในไฟล์สิ่งที่ฉันต้องการแทนที่มีเครื่องหมายคำพูด?
      ตัวอย่างแทนที่สิ่งที่ระบุว่าข้อความ: » 1″ ด้วยข้อความ: » 2″
      คำสั่งจะเป็นอย่างไร

  7.   เพอร์ซีซัลกาโด dijo

    สวัสดี

    ฉันต้องการแทนที่สตริงที่มี @ อยู่ตรงกลางและเปลี่ยนข้อความก่อนหน้า.

    ข้อความที่จะเปลี่ยนแปลง: Viva el Perú
    ข้อความใหม่: Viva mi patria @percysalgado
    แสดง: อาศัยบ้านเกิดเมืองนอนของฉันมานาน

    ขอบคุณสำหรับความช่วยเหลือของคุณ

  8.   ไม่ระบุชื่อ dijo

    "\" คุณต้องใช้เครื่องหมายทับก่อนอักขระที่มีการใช้ @, # สองครั้งจึงจะตีความเป็นข้อความได้

  9.   Gaba dijo

    แล้วลง windows ได้ยังไง ????