Ganti teks di dalam fail dengan hanya satu arahan: perl

Pada kesempatan tertentu kami ingin mengganti teks dalam fail, misalnya, menukar Dokumen.txt semua yang dikatakan "keluarga saya" untuk "kami." Untuk mencapai ini, kami boleh menggunakan editor teks pilihan kami (Kate, Gedit, SublimeText, dll) tetapi selalu baik untuk mengetahui varian, cara lain untuk mencapai hasil yang sama

Ia berlaku dengan ungkapan biasa anda boleh mencapainya, perintah sed hanya luar biasa, ia mempunyai varian dan pilihan yang tidak berkesudahan tetapi ... bagi mereka yang hanya ingin mengganti teks dari kaedah paling tidak mungkin, bagi mereka, saya membawa varian yang lebih mudah ini:

Berikutan contohnya, kami mempunyai fail Dokumen.txt terletak di $ RUMAH / Document.txt dengan teks berikut:

(...) keluarga saya Ia seperti semuanya, seperti milik anda atau jiran anda. Sebenarnya keluarga saya Kami berusaha menjadi orang yang bertanggungjawab dan di mata masyarakat, betul dari segi politik dan sosial. Namun, di rumah saya ada seekor domba hitam, dan itulah peranan saya LOL !. Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang dia fikirkan (walaupun itu nampaknya tidak betul di mata masyarakat), walaupun pada kenyataannya keluarga saya sudah muak dengan kotoran masyarakat hari ini.

Dengan arahan berikut, anda akan menukar «keluarga saya"oleh"kita":

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

Semudah itu 🙂

Jadi teksnya adalah:

(...) kita Ia seperti semuanya, seperti milik anda atau jiran anda. Sebenarnya kita Kami berusaha menjadi orang yang bertanggungjawab dan di mata masyarakat, betul dari segi politik dan sosial. Namun, di rumah saya ada seekor domba hitam, dan itulah peranan saya LOL !. Saya selalu menjadi orang yang tidak takut untuk mengatakan apa yang dia fikirkan (walaupun itu nampaknya tidak betul di mata masyarakat), walaupun pada kenyataannya keluarga saya sudah muak dengan kotoran masyarakat hari ini.

Sintaksnya adalah:

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

Perintahnya mungkin kelihatan agak rumit, mari kita susun sedikit dan jelaskan sedikit lebih mudah 😉

  • perl : Apa yang akan kita gunakan, perl
  • -pi : Pí, bagaimana π (nilai anggaran 3.14)
  • -e : E membayangkannya untuk «e melaksanakan» ^ - ^
  • Kemudian dalam petikan » kami buka dengan a s dan kita tutup dengan a g: "sg" ... Bayangkan S untuk Mula dan G untuk Game Over 😀
  • Belok antara sg kita mesti meletakkan dua set kurung: [] y [], dengan cara itu: "S [] [] g"
  • Di dalam tanda kurung pertama seperti yang saya katakan di atas, teks yang ingin kita alih keluar dan ganti dengan yang baru akan masuk, sementara pada kumpulan kurung kedua teks baru yang akan dimasukkan, akan mengikuti contoh: "S [keluarga saya] [kami] g"

Mudah bukan?

Penjelasannya sebenarnya jauh lebih luas daripada apa yang diperlukan untuk perintah itu, cukup mudah difahami 🙂

Perl adalah lebih daripada sekadar cara untuk mengganti teks, ini adalah keseluruhan bahasa 😉

Sekiranya anda ingin mengetahui lebih lanjut mengenainya, pasang pakejnya perl-doc dan lihatlah siapa yang membenarkannya, ini hanyalah alam semesta yang berbeza

By the way dan untuk menutup, dengan andaian anda ingin mencari semua fail .txt yang anda miliki di $ HOME / Documents / dan masing-masing menggantikan "keluarga saya" dengan "kami", anda boleh bergabung mencari + perl untuk mencapai ini:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

Atau menggunakan kad liar:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Masalah dengan varian kedua ini adalah bahawa ia tidak akan menggantikan dalam fail yang ada di subfolder 🙂

Bagaimanapun, saya harap anda menganggapnya menarik. Bagi saya ia sangat berguna, saya sudah dapat mengganti teks terus dari terminal ... hebat! 😀


21 komen, tinggalkan komen anda

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Boom kata

    Saya rasa ramai di sini tahu arahan sed, yang mempunyai tujuan yang sama, menjadikannya lebih baik dan lebih mudah digunakan ...

    1.    KZKG ^ Gaara kata

      Terima kasih atas komen anda,
      Hanya dengan dua butiran, mengapa anda mengatakan bahawa sed menjadikannya lebih baik? Adakah lebih mudah digunakan dengan begitu banyak watak 'pelik'?

  2.   Federico A. Valdes Toujague kata

    Salam untuk semua !!!. Saya telah menggunakan arahan sed, dan kaedah yang dijelaskan di sini dengan perl lebih mudah. Terima kasih KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara kata

      Terima kasih atas komen 🙂
      Saya rasa ini lebih sederhana daripada ungkapan biasa ... bahawa dengan begitu banyak watak 'pelik', sesuatu yang sangat rumit untuk difahami dan dipelajari dapat dilakukan kepada mereka yang tidak pandai.

      1.    giskard kata

        Terdapat pepatah «lama» di luar sana: «Saya menghadapi masalah, saya memutuskan untuk menggunakan Ungkapan Biasa ... sekarang saya mempunyai DUA masalah» 😉

        1.    KZKG ^ Gaara kata

          HAHAHAHAHAHAHA !!!
          Ungkapan biasa dapat menyelamatkan nyawa kita pada titik tertentu ... ya, memerlukan waktu yang lama untuk belajar bagaimana menggunakannya dan tidak mati ketika mencuba.

          Sekiranya saya mengetahui perintah ini bertahun-tahun yang lalu, ALLAH !! betapa mudahnya hidup saya 😀

          1.    giskard kata

            Jelas! Dikendalikan dengan baik mereka sangat berkuasa 🙂 Tidak ada yang lebih baik untuk memanipulasi teks. Tetapi kadang-kadang, seperti yang anda katakan dalam kes ini dengan Perl, anda tidak perlu melangkah jauh jika penggantian sudah cukup.
            Saya akan menggunakan Python pula :)

    2.    penipu kata

      Tetapi dalam kehausan saya melihatnya lebih sederhana ... adakah saya melakukan sesuatu yang salah?

      sed -i "yes / what-I-want-to-change / new-to-put /" file-in-which-to-diganti

      1.    KZKG ^ Gaara kata

        heh heh ... dan jika saya mahu ganti "http://my.blog.com/content/" dengan "http://my.blog.com/uploads/files/" 😀 ... sudah ada anda sudah untuk meletakkan \ dengan ruang dan lain-lain, dan menjadi kompleks atau tidak?

        1.    penipu kata

          Tidak wajib menggunakan / sebagai pemisah. Lihat dengan +

          fail -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fail

          1.    KZKG ^ Gaara kata

            O_O ... WTF!
            Anda telah membuka banyak pilihan untuk saya sekarang .. O_O

          2.    giskard kata

            Saya suka catatan ini di mana kita semua belajar sesuatu 🙂
            Saya juga tidak tahu.

  3.   RAW-Asas kata

    Saya lebih suka menggunakan secara langsung vi ..

    Semudah:
    :% s / kami / keluarga saya / g

    % -> keseluruhan dokumen
    s -> cari
    g -> semua kejadian

    Salam ..

    1.    KZKG ^ Gaara kata

      Terima kasih!
      Saya tidak tahu bagaimana melakukannya dengan vi

  4.   st0rmt4il kata

    Ditambah ke kegemaran!

    Terima kasih!

  5.   DuranG kata

    Kemasukan hebat! Sekiranya ada yang berminat, sama dengan arahan Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Meragui kata

      Dan apa yang berlaku jika dalam fail apa yang ingin saya ganti mempunyai tanda kutip?
      Contoh ganti teks yang disebut: »1 ″ dengan teks:» 2 ″
      bagaimana perintahnya?

  6.   Percy salgado kata

    Hello

    Saya mahu mengganti rentetan yang mempunyai @ di tengah dan hanya menukar teks ke sebelum di.

    teks untuk diubah: Peru hidup lama
    teks baru: Viva mi patria @percysalgado
    Ditunjukkan: Hidup lama tanah air saya

    Terima kasih atas bantuan anda

  7.   Anonymous kata

    "\" Anda mesti menggunakan garis miring sebelum watak dengan penggunaan ganda @, #, sehingga mereka ditafsirkan sebagai teks.

  8.   Gaba kata

    Dan bagaimana saya melakukannya di tingkap ????