Korvaa tiedostoissa oleva teksti yhdellä komennolla: perl

Joissakin tapauksissa haluamme korvata tekstin tiedostossa, esimerkiksi muuttaa tiedostoa Document.txt kaikki mitä "perheeni" sanoo "meille". Tämän saavuttamiseksi voimme käyttää haluamaamme tekstieditoria (Kate, Gedit, SublimeText jne.), Mutta on aina hyvä tietää variantteja, muita tapoja saavuttaa sama tulos 🙂

Se tapahtuu niin säännölliset lausekkeet voit saavuttaa tämän, sed-komento on yksinkertaisesti upea, sillä on loputtomia muunnelmia ja vaihtoehtoja, mutta ... niille, jotka haluavat vain korvata tekstin mahdollisimman monimutkainen tapa, heille on se, että tuon tämän paljon yksinkertaisemman vaihtoehdon:

Esimerkin mukaisesti meillä on tiedosto Document.txt sijaitsevat $ HOME / Document.txt ja seuraava teksti:

(...) perheeni se on kuin ne kaikki, kuten sinun tai naapurisi. Itse asiassa perheeni Yritämme olla vastuullisia ihmisiä ja yhteiskunnan silmissä poliittisesti ja sosiaalisesti korrekteja. Talossani on kuitenkin musta lammas, ja se on roolini LOL! Olen aina ollut se, joka ei pelkää sanoa mitä ajattelee (vaikka se ei olekaan yhteiskunnan silmissä ilmeisesti oikein), vaikka todellisuudessa perheeni on kyllästynyt lika nykypäivän yhteiskunta.

Seuraavan komennon avulla muutat «perheeni"kirjoittanut"me":

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

Se on niin yksinkertaista 🙂

Joten teksti olisi:

(...) me se on kuin ne kaikki, kuten sinun tai naapurisi. Itse asiassa me Yritämme olla vastuullisia ihmisiä ja yhteiskunnan silmissä poliittisesti ja sosiaalisesti korrekteja. Talossani on kuitenkin musta lammas, ja se on roolini LOL! Olen aina ollut se, joka ei pelkää sanoa mitä ajattelee (vaikka se ei olekaan yhteiskunnan silmissä ilmeisesti oikein), vaikka todellisuudessa perheeni on kyllästynyt lika nykypäivän yhteiskunta.

Syntaksi on:

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

Komento saattaa tuntua hieman monimutkaiselta, hajotetaan se hieman ja selitetään se hieman yksinkertaisemmin 😉

  • perl : Mitä käytämme, perl
  • pi : Pí, miten π (likimääräinen arvo 3.14)
  • -e : E kuvittelee sitä, että «e toteutetaan» ^ - ^
  • Sitten lainausmerkeissä » avaamme a s ja lopetamme a g: "sg" … Kuvittele S for Start ja G Game Over 😀
  • Käänny sg meidän on laitettava kaksi suluista: [] y [], koska se on: "S [] [] g"
  • Ensimmäisten sulkeiden sisällä, kuten sanoin edellä, teksti, jonka haluamme poistaa ja korvata uudella, menee, kun taas toisessa suluissa uusi laitettava teksti menee esimerkin mukaisesti: "S [perheeni] [me] g"

Yksinkertainen, eikö olekin?

Selitys on itse asiassa paljon laajempi kuin mitä komento edellyttää, se on melko helppo ymmärtää 🙂

Perl on paljon, paljon enemmän kuin tapa korvata teksti, se on koko kieli 😉

Jos haluat lisätietoja siitä, asenna paketti perl-doc ja katsokaa kuka sen sallii, se on vain erilainen maailmankaikkeus.

Muuten ja sulkea olettaen, että haluat löytää kaikki .txt-tiedostot, jotka sinulla on kansiossa $ HOME / Documents / ja jokaisessa korvaa "perheeni" sanalla "me", voit liittyä find + perl-tiedostoon tämän saavuttamiseksi:

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

Tai jokerimerkin avulla:

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

Tämän toisen version ongelma on, että se ei korvaa tiedostoja, jotka ovat alikansioissa 🙂

Joka tapauksessa, toivon, että pidit siitä mielenkiintoisena. Minulle se on ollut todella hyödyllinen, voin jo korvata tekstin suoraan terminaalista ... hieno! 😀


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   Puomi dijo

    Luulen, että monet meistä täällä tietävät sed-komennon, jolla on sama tarkoitus, se tekee sen paljon paremmin ja sitä on helpompi käyttää ...

    1.    KZKG ^ Gaara dijo

      Kiitos kommentistasi,
      Vain kaksi yksityiskohtaa, miksi sanot, että sed tekee siitä paremman? Onko sitä todella helpompi käyttää niin monien 'outojen' hahmojen kanssa?

  2.   Federico A. Valdes Toujague dijo

    Tervehdys kaikille!!!. Olen käyttänyt komentoa janoja tässä kuvattu menetelmä perlin kanssa on yksinkertaisempi. Kiitos KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara dijo

      Kiitos kommentista 🙂
      No, ainakin minulle tämä tuntuu yksinkertaisemmalta kuin säännölliset lausekkeet ... että niin monien "outojen" hahmojen kanssa ei-tajuille voidaan tehdä jotain todella monimutkaista ymmärtää ja oppia.

      1.    Giskard dijo

        Siellä on «vanha» sanonta: «Minulla oli ongelma, päätin käyttää säännöllisiä lausekkeita ... nyt minulla on KAKSI ongelmaa» 😉

        1.    KZKG ^ Gaara dijo

          HAHAHAHAHAHAHA !!!
          Säännölliset lausekkeet voivat pelastaa henkemme tietyssä vaiheessa ... kyllä, kestää kauan oppia käyttämään niitä eikä kuolla yrittäessään.

          Jos olisin tiennyt tämän komennon vuosia sitten, JUMALA !! kuinka yksinkertainen elämäni olisi ollut 😀

          1.    Giskard dijo

            Asia selvä! Hyvin hoidetut, ne ovat erittäin tehokkaita 🙂 Ei mitään parempaa tekstin manipuloimiseksi. Mutta joskus, kuten sanot tässä tapauksessa Perlin kanssa, sinun ei tarvitse mennä niin pitkälle, jos korvaaminen riittää.
            Olisin kuitenkin käyttänyt Pythonia :)

    2.    metsästäjä dijo

      Mutta jano näen sen vielä yksinkertaisemmaksi ... teenkö jotain väärin?

      sed -i "jos / mitä-haluan muuttaa / mitä-uutta-laittaa /" tiedosto-joka-korvata

      1.    KZKG ^ Gaara dijo

        heh heh ... ja jos haluan korvata "http://my.blog.com/content/" sanalla "http://my.blog.com/uploads/files/" 😀 ... jo sinne on laitettava \ välilyönteillä ja muilla ja siitä tulee monimutkainen vai ei?

        1.    metsästäjä dijo

          / Ei ole pakollista käyttää erottimena. Katso + -näppäimellä

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

          1.    KZKG ^ Gaara dijo

            O_O ... WTF!
            Olet avannut minulle koko vaihtoehtojen universumin nyt .. O_O

          2.    Giskard dijo

            Rakastan näitä viestejä, joissa me kaikki oppimme jotain 🙂
            En tiennyt sitä.

  3.   RAW-Basic dijo

    Haluan käyttää suoraan vi ..

    Niin yksinkertainen kuin:
    :% s / us / perheeni / g

    % -> koko asiakirja
    s -> etsi
    g -> kaikki esiintymät

    Tervehdys ..

    1.    KZKG ^ Gaara dijo

      Kiitos!
      En tiennyt miten se tehdään vi: llä

  4.   st0rmt4il dijo

    Lisätty suosikkeihin!

    Kiitos!

  5.   n3 myrsky dijo
  6.   DuranG dijo

    Upea merkintä! Jos joku on kiinnostunut, sama Linux sed -komennolla: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Epäilen dijo

      Entä jos tiedoston sisällä, jolla haluan korvata, on lainauksia?
      Esimerkki tekstin sanan: »1 ″ korvaamisesta tekstillä:» 2 ″
      miten komento olisi?

  7.   Percy salgado dijo

    Hei

    Halusin korvata merkkijonon, jonka keskellä oli @ ja joka muutti vain tekstiä ennen at-merkkiä.

    muutettava teksti: Viva el Perú
    uusi teksti: Viva mi patria @percysalgado
    Näytetään: Eläköön kotimaani

    Kiitos avusta

  8.   anonyymi dijo

    "\" Sinun on käytettävä kauttaviivaa ennen merkkejä, joissa on kaksinkertainen käyttö @, #, jotta ne tulkitaan tekstinä.

  9.   GABA dijo

    Ja miten teen sen ikkunoissa ????