A fájlokban lévő szöveget csak egy paranccsal cserélje le: perl

Bizonyos esetekben a szöveget le akarjuk cserélni egy fájlban, például megváltoztatni a fájlt Document.txt mindent, amit a "családom" mond "nekünk". Ennek eléréséhez használhatjuk az általunk preferált szövegszerkesztőt (Kate, Gedit, SublimeText stb.), De mindig jó, ha ismerünk variánsokat, más módszereket ugyanazon eredmény elérésére 🙂

Előfordul, hogy reguláris kifejezések ezt elérheti, a sed parancs egyszerűen csodálatos, végtelen változatai és lehetőségei vannak, de ... azok számára, akik csak a a lehető legkomplexebb módonszámukra az, hogy ezt a sokkal egyszerűbb változatot hozom:

A példát követve megvan a fájl Document.txt található $ HOME / Document.txt a következő szöveggel:

(...) a családom Olyan, mint mindegyik, akár a tiéd vagy a szomszédé. Valójában a családom Igyekszünk felelős emberek lenni és a társadalom szemében, politikailag és társadalmilag korrektek. Az én házamban azonban van egy fekete juh, és ez az én szerepem LOL! Mindig én voltam az, aki nem fél elmondani, amit gondol (még akkor is, ha a társadalom szemében ez nyilvánvalóan nem helyes), bár a valóságban a családomnak elegem van a piszok a mai társadalom.

A következő paranccsal megváltoztathatja a «a családom"által"mi„:

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

Ennyire egyszerű 🙂

Tehát a szöveg a következő lenne:

(...) mi Olyan, mint mindegyik, akár a tiéd vagy a szomszédé. Valójában mi Igyekszünk felelős emberek lenni és a társadalom szemében, politikailag és társadalmilag korrektek. Az én házamban azonban van egy fekete juh, és ez az én szerepem LOL! Mindig én voltam az, aki nem fél elmondani, amit gondol (még akkor is, ha a társadalom szemében ez nyilvánvalóan nem helyes), bár a valóságban a családomnak elegem van a piszok a mai társadalom.

A szintaxis a következő:

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

A parancs kissé összetettnek tűnhet, bontsuk le egy kicsit, és magyarázzuk el kicsit egyszerűbben 😉

  • perl : Mit fogunk használni, perl
  • -pi : Pí, hogyan π (hozzávetőleges értéke 3.14)
  • -e : Az E képzeli el, hogy «e végrehajtja» ^ - ^
  • Majd idézőjelben » a-val nyitunk s és bezárunk egy g: "vmi" Képzelje el az S-t a Start és a G-t a Game Over 😀-hez
  • Forduljon a sg két zárójelet kell tennünk: [] y [], mivel ilyen: "S [] [] g"
  • Az első zárójelek belsejében, amint azt fentebb mondtam, az a szöveg kerül, amelyet el akarunk távolítani és lecserélni egy úttal, míg a második zárójelben az új szöveg kerül a példára: "S [családom] [mi] g"

Ugye egyszerű?

A magyarázat valójában sokkal kiterjedtebb, mint ami a parancshoz szükséges, meglehetősen egyszerű megérteni 🙂

A Perl sokkal, de sokkal több, mint a szöveg pótlásának módja, ez egy egész nyelv 😉

Ha többet szeretne megtudni róla, telepítse a csomagot perl-doc és vessen egy pillantást arra, hogy mit enged, ez csak egy másik univerzum.

Egyébként és bezárásként, feltételezve, hogy meg akarja találni az összes .txt fájlt, amely a $ HOME / Documents / fájlban található, és mindegyikben kicseréli a "családom" szót "velünk", csatlakozhat a find + perl programhoz ennek eléréséhez:

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

Vagy helyettesítő karakter használatával:

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

A probléma ezzel a második változattal az, hogy nem helyettesíti az almappákban lévő fájlokat

Egyébként remélem érdekesnek találta. Számomra ez nagyon hasznos volt, máris kicserélhetem a szöveget közvetlenül a terminálról ... nagyszerű! 😀


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Bumm dijo

    Nos, azt hiszem, sokan ismerjük itt a sed parancsot, amely ugyanazt a célt szolgálja, sokkal jobban csinálja és könnyebben használható ...

    1.    KZKG ^ Gaara dijo

      Köszönöm a hozzászólásod,
      Csak két részlet, miért mondod, hogy a sed teszi jobbá? Tényleg könnyebb ennyi "furcsa" karakterrel használni?

  2.   Federico A. Valdes Toujague dijo

    Üdvözlök mindenkit!!!. Használtam a parancsot szomjúság, és az itt leírt módszer a perl-rel egyszerűbb. Köszi KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara dijo

      Köszönöm a megjegyzést 🙂
      Nos, legalábbis számomra úgy tűnik, hogy ez egyszerűbb, mint a reguláris kifejezések ... hogy ennyi "furcsa" karakter mellett valami igazán bonyolult, amit meg kell érteni és megtanulni a nem értők számára.

      1.    giskard dijo

        Van egy "régi" mondás: "Problémám volt, úgy döntöttem, hogy a reguláris kifejezéseket használom ... most KÉT problémám van" 😉

        1.    KZKG ^ Gaara dijo

          HAHAHAHAHAHAHA !!!
          A rendszeres kifejezések egy bizonyos ponton megmenthetik az életünket ... igen, sok időbe telik, amíg megtanuljuk használni, és nem halunk meg próbálkozva.

          Ha évekkel ezelőtt ismertem volna ezt a parancsot, ISTEN !! milyen egyszerű lett volna az életem 😀

          1.    giskard dijo

            Egyértelmű! Jól kezelhető, nagyon erősek. Semmi sem jobb a szöveg manipulálására. De néha, ahogy Ön ebben az esetben mondja a Perl-lel, nem kell olyan messzire mennie, ha elegendő a cseréje.
            Amúgy is használtam volna a Pythont :)

    2.    vadász dijo

      De szomjúságban még egyszerűbbnek látom ... csinálok valamit rosszul?

      sed -i "if / what-I-to-change / new-to-put /" file-to cserélni

      1.    KZKG ^ Gaara dijo

        heh heh ... és ha a "http://my.blog.com/content/" szót szeretném lecserélni a "http://my.blog.com/uploads/files/" 😀 szóra ... már ott van helyezni \ szóközökkel és másokkal, és bonyolulttá válik vagy sem?

        1.    vadász dijo

          Nem kötelező a / elválasztóként használni. Nézd meg a + gombbal

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

          1.    KZKG ^ Gaara dijo

            O_O… WTF!
            A lehetőségek teljes univerzumát nyitottad meg előttem .. O_O

          2.    giskard dijo

            Szeretem ezeket a bejegyzéseket, ahol mindannyian tanulunk valamit something
            Ezt én sem tudtam.

  3.   RAW-Basic dijo

    Inkább közvetlenül a vi ..

    Egyszerű, mint:
    :% s / us / családom / g

    % -> teljes dokumentum
    s -> keresés
    g -> minden előfordulás

    Greetings ..

    1.    KZKG ^ Gaara dijo

      Köszönöm!
      Nem tudtam, hogyan kell csinálni a vi-vel

  4.   st0rmt4il dijo

    Hozzáadva a kedvencekhez!

    Köszönöm!

  5.   n3vihar dijo

    Vessen egy pillantást rá, ha rendelkezik egy kicsit az rpl paranccsal

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

  6.   DuranG dijo

    Remek belépés! Ha valakit érdekel, ugyanez a Linux sed paranccsal: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Kételkedni dijo

      És mi történik, ha a fájlban, amit cserélni akarok, vannak árajánlatok?
      Példa cserélje ki a szöveget: »1 ″ szöveggel:» 2 ″
      hogy lenne a parancs?

  7.   Percy salgado dijo

    Helló

    Egy olyan karakterláncot akartam kicserélni, amelynek közepe @ volt, és csak az at jel előtti szöveget változtatta meg.

    változtatandó szöveg: éljen Peru
    új szöveg: Viva mi patria @percysalgado
    Megmutatva: Éljen a hazám

    Köszönöm a segítséget

  8.   Névtelen dijo

    "\" Használnia kell a perjelet a @, # kettős használatú karakterek előtt, hogy szövegként értelmezzék őket.

  9.   Gaba dijo

    És hogy tudom csinálni Windowsban ????