Anstataŭigu tekston en dosieroj per nur unu komando: perl

En iuj okazoj ni volas anstataŭigi tekston en dosiero, ekzemple ŝanĝi en Document.txt ĉio, kion "mia familio" diras por "ni". Por atingi tion ni povas uzi nian preferatan tekstredaktilon (Kate, Gedit, SublimeText, ktp) sed ĉiam estas bone scii variantojn, aliajn manierojn atingi la saman rezulton.

Okazas, ke kun regulaj esprimoj vi povas atingi tion, la komando sed estas simple grandioza, ĝi havas senfinajn variantojn kaj eblojn sed ... por tiuj, kiuj nur volas anstataŭigi tekston de la malplej kompleksa maniero ebla, por ili, mi alportas ĉi tiun multe pli simplan varianton:

Sekvante la ekzemplon, ni havas la dosieron Document.txt lokita en $ HOME / Document.txt kun la sekva teksto:

(...) mia familio Ĝi similas al ĉiuj, kiel al via aŭ al via najbaro. Fakte mia familio Ni klopodas esti respondecaj homoj kaj antaŭ la okuloj de la socio, politike kaj socie ĝustaj. Tamen en mia domo estas nigra ŝafo, kaj tio estas mia rolo LOL!. Mi ĉiam estis tiu, kiu ne timas diri kion li pensas (kvankam ĝi ne ŝajne ĝustas en la okuloj de la socio), kvankam fakte mia familio estas laca de la malpuraĵo hodiaŭa socio.

Per la sekva komando vi ŝanĝos «mia familio"per"ni":

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

Ĝi estas tiel simpla 🙂

Do la teksto estus:

(...) ni Ĝi similas al ĉiuj, kiel al via aŭ al via najbaro. Fakte ni Ni klopodas esti respondecaj homoj kaj antaŭ la okuloj de la socio, politike kaj socie ĝustaj. Tamen en mia domo estas nigra ŝafo, kaj tio estas mia rolo LOL!. Mi ĉiam estis tiu, kiu ne timas diri kion li pensas (kvankam ĝi ne ŝajne ĝustas en la okuloj de la socio), kvankam fakte mia familio estas laca de la malpuraĵo hodiaŭa socio.

La sintakso estas:

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

La komando eble ŝajnas iom kompleksa, ni iomete malkonstruu ĝin kaj klarigu ĝin iom pli simple 😉

  • perl : Kion ni uzos, perl
  • -pi : Pí, kiel π (la proksimuma valoro de 3.14)
  • -e : La E imagu ĝin por «e ekzekuti» ^ - ^
  • Tiam inter citiloj » ni malfermas per s kaj ni fermas per a g: "sg" … Imagu la S por Komenco kaj la G por Game Over 😀
  • Turnu inter la sg ni devas meti du arojn da krampoj: [] y [], tiel: "S [] [] g"
  • En la unuaj krampoj, kiel mi diris supre, la teksto, kiun ni volas forigi kaj anstataŭigi per nova, iros, dum en la dua aro da krampoj, la nova teksto metota iros, sekvante la ekzemplon: "S [mia familio] [ni] g"

Simpla ĉu ne?

La klarigo efektive estas multe pli vasta ol tio, kio necesas por la komando, estas sufiĉe simple kompreni 🙂

Perl estas multe, multe pli ol nur maniero anstataŭigi tekston, ĝi estas tuta lingvo 😉

Se vi volas lerni pli pri ĝi, instalu la pakaĵon perl-doc kaj rigardu al kiu ĝi permesas, ĝi estas nur alia universo.

Cetere kaj fermi, supozante ke vi volas trovi ĉiujn .txt-dosierojn, kiujn vi havas en $ HOME / Dokumentoj / kaj en ĉiu anstataŭigu "mian familion" per "ni", vi povas aliĝi al find + perl por atingi ĉi tion:

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

Aŭ uzante ĵokeron:

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

La problemo kun ĉi tiu dua varianto estas, ke ĝi ne anstataŭiĝos en dosieroj en subdosierujoj 🙂

Ĉiuokaze, mi esperas, ke vi trovis ĝin interesa. Por mi ĝi estis vere utila, mi jam povas anstataŭigi tekston rekte de la terminalo ... bonege! 😀


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

21 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   eksplodo diris

    Nu, mi pensas, ke multaj el ni ĉi tie konas la komandon sed, kiu servas la saman celon, ĝi faras ĝin multe pli bone kaj pli facile uzeblas ...

    1.    KZKG ^ Gaara diris

      Dankon pro via komento,
      Nur du detaloj, kial vi diras, ke sed plibonigas ĝin? Ĉu vere pli facile uzi kun tiom da 'strangaj' roluloj?

  2.   Federico A. Valdes Toujague diris

    Saluton al ĉiuj !!!. Mi uzis la komandon sed, kaj la metodo priskribita ĉi tie kun perl estas pli simpla. Dankon KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara diris

      Dankon pro la komento 🙂
      Nu, almenaŭ al mi ĉi tio ŝajnas pli simpla ol regulaj esprimoj ... ke kun tiom da "strangaj" signoj, io vere kompleksa por kompreni kaj lerni povas esti farita al la ne-spertaj.

      1.    giskardo diris

        Estas "malnova" diraĵo tie: "Mi havis problemon, mi decidis uzi Regulajn Esprimojn ... nun mi havas DU problemojn" 😉

        1.    KZKG ^ Gaara diris

          HAHAHAHAHAHAHA !!!
          Regulaj esprimoj povas savi niajn vivojn en certa momento ... jes, necesas longa tempo por lerni kiel uzi ilin kaj ne morti provante.

          Se mi scius ĉi tiun komandon antaŭ jaroj, DIO !! kiel simpla mia vivo estus estinta 😀

          1.    giskardo diris

            Klara! Bone pritraktitaj ili estas tre potencaj 🙂 Nenio pli bona por manipuli tekston. Sed kelkfoje, kiel vi diras ĉi-kaze kun Perl, vi ne devas iri tiel malproksimen se anstataŭaĵo sufiĉas.
            Mi uzus Python ĉiuokaze :)

    2.    ĉasisto diris

      Sed soifante mi vidas ĝin eĉ pli simple ... ĉu mi faras ion malĝustan?

      sed -i "se / kion-mi-volas-ŝanĝi / nova-meti /" dosiero-en-anstataŭebla

      1.    KZKG ^ Gaara diris

        he he he ... kaj se mi volas anstataŭigi "http://my.blog.com/content/" per "http://my.blog.com/uploads/files/" 😀 ... jam tie vi havas meti \ kun spacoj kaj aliaj, kaj ĝi fariĝas kompleksa aŭ ne?

        1.    ĉasisto diris

          Ne estas devige uzi / kiel apartigilon. Rigardu per +

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

          1.    KZKG ^ Gaara diris

            O_O ... WTF!
            Vi malfermis tutan universon de ebloj por mi nun .. O_O

          2.    giskardo diris

            Mi amas ĉi tiujn afiŝojn, kie ni ĉiuj lernas ion 🙂
            Ankaŭ mi ne sciis tion.

  3.   RAW-Baza diris

    Mi preferas uzi rekte vi ..

    Tiel simpla kiel:
    :% s / us / mia familio / g

    % -> tuta dokumento
    s -> serĉo
    g -> ĉiuj okazoj

    Saluton ..

    1.    KZKG ^ Gaara diris

      Gracias!
      Mi ne sciis kiel fari ĝin per vi

  4.   st0rmt4il diris

    Aldonita al plej ŝatataj!

    Gracias!

  5.   DuranG diris

    Bonega eniro! Se iu interesas, same kun la komando Linukso sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Dubado diris

      Kaj kio okazas, se ene de la dosiero, kion mi volas anstataŭigi, havas citilojn?
      Ekzemplo anstataŭigu tion, kio diras tekston: »1 ″ per teksto:» 2 ″
      kiel estus la ordono?

  6.   Percy salgado diris

    Saluton

    Mi volis anstataŭigi ĉenon, kiu havis @ en la mezo kaj nur ŝanĝis la tekston al la antaŭ la ĉe.

    teksto por ŝanĝi: Viva el Perú
    nova teksto: Viva mi patria @percysalgado
    Montrita: Vivu mia patrujo

    Dankon pro via helpo

  7.   anonima diris

    "\" Vi devas uzi la oblikon antaŭ la signoj kun duobla uzo @, #, tiel ke ili estu interpretataj kiel teksto.

  8.   Gaba diris

    Kaj kiel mi faras ĝin en fenestroj ????