Failuose esantį tekstą pakeiskite tik viena komanda: perl

Tam tikrais atvejais norime pakeisti failo tekstą, pavyzdžiui, pakeisti Document.txt viskas, ką „mano šeima“ sako už „mus“. Norėdami tai pasiekti, galime naudoti norimą teksto rengyklę (Kate, Gedit, SublimeText ir kt.), Tačiau visada gerai žinoti variantus, kitus būdus, kaip pasiekti tą patį rezultatą the

Būna, kad su reguliarūs posakiai tai galima pasiekti, sed komanda yra tiesiog nuostabi, ji turi begalę variantų ir variantų, bet ... tiems, kurie tiesiog nori pakeisti tekstą iš kuo sudėtingesnis būdas, jiems pateikiu šį daug paprastesnį variantą:

Pagal pavyzdį turime failą Document.txt įsikūrusi $ HOME / Document.txt su tokiu tekstu:

(...) mano šeima Tai panašu į visus juos, kaip ir tavo ar kaimyno. Iš tiesų mano šeima Mes stengiamės būti atsakingi žmonės ir visuomenės akimis, politiškai ir socialiai korektiški. Tačiau mano namuose yra juoda avis, ir tai yra mano vaidmuo. Aš visada buvau tas, kuris nebijo pasakyti, ką galvoja (net jei tai akivaizdžiai nėra teisinga visuomenės akimis), nors iš tikrųjų mano šeimai atsibodo purvas nūdienos visuomenė.

Su šia komanda pakeisite «mano šeima„pagal“mums":

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

Tai taip paprasta 🙂

Taigi tekstas būtų:

(...) mums Tai panašu į visus juos, kaip ir tavo ar kaimyno. Iš tiesų mums Mes stengiamės būti atsakingi žmonės ir visuomenės akimis, politiškai ir socialiai korektiški. Tačiau mano namuose yra juoda avis, ir tai yra mano vaidmuo. Aš visada buvau tas, kuris nebijo pasakyti, ką galvoja (net jei tai akivaizdžiai nėra teisinga visuomenės akimis), nors iš tikrųjų mano šeimai atsibodo purvas nūdienos visuomenė.

Sintaksė yra:

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

Komanda gali pasirodyti šiek tiek sudėtinga, šiek tiek suskaidykime ir paaiškinkime šiek tiek paprasčiau 😉

  • perl : Ką naudosime, perl
  • -pi : Pí, kaip π (apytikslė vertė 3.14)
  • -e : E įsivaizduoja, kad „e įvykdytų“ ^ - ^
  • Tada kabutėse » mes atidarome su s ir mes užsidarome su g: „sg“ ... Įsivaizduokite „S“, jei norite pradėti, ir „G“, jei žaidimas baigtas 😀
  • Pasukite tarp sg turime įdėti du skliaustų rinkinius: [] y []būdamas tokiu būdu: „S [] [] g“
  • Pirmųjų skliaustų viduje, kaip sakiau aukščiau, bus tekstas, kurį norime pašalinti ir pakeisti nauju, o antrajame skliaustų rinkinyje bus pateiktas naujas tekstas pagal pavyzdį: „S [mano šeima] [mes] g“

Paprasta, ar ne?

Paaiškinimas iš tikrųjų yra daug platesnis nei tai, ko reikia komandai, jį suprasti yra gana paprasta 🙂

Perl yra daug, daug daugiau nei būdas pakeisti tekstą, tai yra visa kalba language

Jei norite sužinoti daugiau apie tai, įdiekite paketą perl-doc ir pažvelk į tai, ką jis leidžia, tai tik kita visata.

Beje, jei norite uždaryti, darant prielaidą, kad norite rasti visus .txt failus, kuriuos turite „$ HOME“ / „Documents“, ir kiekviename iš jų pakeisti „mano šeimą“ į „mus“, galite prisijungti prie „find + perl“, kad tai pasiektumėte:

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

Arba naudojant pakaitos simbolį:

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

Šio antrojo varianto problema yra ta, kad jis nebus pakeistas failuose, esančiuose poaplankiuose

Šiaip ar taip, tikiuosi, kad jums tai pasirodė įdomu. Man tai buvo tikrai naudinga, aš jau galiu pakeisti tekstą tiesiai iš terminalo ... puiku! 😀


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   bumas sakė

    Na, manau, kad daugelis iš mūsų čia žino komandą „sed“, kuri atlieka tą patį tikslą, ji ją atlieka daug geriau ir yra lengviau naudojama ...

    1.    KZKG ^ Gaara sakė

      Ačiū už jūsų komentarą,
      Tik dvi detalės, kodėl jūs sakote, kad sed daro jį geresnį? Ar tikrai lengviau naudoti su tiek daug „keistų“ personažų?

  2.   Federico A. Valdésas Toujague'as sakė

    Sveiki visi!!!. Aš pasinaudojau komanda troškulys, o čia aprašytas metodas su perl yra paprastesnis. Aciu KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara sakė

      Ačiū už komentarą 🙂
      Na, bent jau man atrodo, kad tai yra paprasčiau nei įprasti posakiai ... kad turint tiek daug „keistų“ personažų, neišmanantiems galima padaryti tai, ką tikrai sudėtinga suprasti ir išmokti.

      1.    Giskardas sakė

        Yra „senas“ posakis: „Aš turėjau problemą, nusprendžiau naudoti įprastus posakius ... dabar turiu DU problemų“ 😉

        1.    KZKG ^ Gaara sakė

          HAHAHAHAHAHAHA !!!
          Reguliarūs posakiai tam tikru momentu gali išgelbėti mūsų gyvybes ... taip, reikia daug laiko išmokti jais naudotis ir nemirti bandant.

          Jei būčiau žinojusi šią komandą prieš daugelį metų, DIEVAS !! koks paprastas būtų buvęs mano gyvenimas 😀

          1.    Giskardas sakė

            Aišku! Gerai tvarkomi, jie yra labai galingi. Nieko geresnio manipuliuoti tekstu. Tačiau kartais, kaip sakote šiuo atveju su Perlu, nereikia taip toli eiti, jei pakanka pakeitimo.
            Šiaip būčiau naudojusi „Python“ :)

    2.    dunteris sakė

      Bet ištroškęs matau tai dar paprasčiau ... ar aš ką nors darau ne taip?

      sed -i "jei / ką-noriu pakeisti / naujas-įdėti /" failas-kurį-pakeisti

      1.    KZKG ^ Gaara sakė

        heh heh ... ir jei noriu pakeisti „http://my.blog.com/content/“ į „http://my.blog.com/uploads/files/“ 😀 ... jau turite įdėti \ su tarpais ir kitais, ir tai tampa sudėtinga, ar ne?

        1.    dunteris sakė

          Naudoti / kaip separatorių nėra privaloma. Pažvelkite su +

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

          1.    KZKG ^ Gaara sakė

            O_O ... WTF!
            Jūs dabar man atvėrėte visą variantų visatą .. O_O

          2.    Giskardas sakė

            Man patinka šie įrašai, kai visi kažko išmokstame 🙂
            Aš taip pat nežinojau.

  3.   „RAW-Basic“ sakė

    Aš norėčiau naudoti tiesiogiai vi ..

    Paprasta kaip:
    :% s / us / my family / g

    % -> visas dokumentas
    s -> paieška
    g -> visi įvykiai

    Sveikinimai ..

    1.    KZKG ^ Gaara sakė

      Ačiū!
      Aš nežinojau, kaip tai padaryti su vi

  4.   st0rmt4il sakė

    Pridėta prie mėgstamiausių!

    Ačiū!

  5.   n3 audra sakė
  6.   DuranG sakė

    Puikus įrašas! Jei kas nors domisi, tas pats su „Linux sed“ komanda: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Abejoju sakė

      O kas nutiks, jei faile, kurį noriu pakeisti, yra kabučių?
      Pavyzdys, kas sako tekstą: »1 ″ tekstu:» 2 ″
      kaip būtų komanda?

  7.   Percy salgado sakė

    Sveiki

    Norėjau pakeisti eilutę, kurios viduryje būtų @, o tekstas būtų pakeistas tik į prieš ženklą at.

    tekstas, kurį reikia pakeisti: Tegyvuoja Peru
    naujas tekstas: Viva mi patria @percysalgado
    Parodyta: Tegyvuoja mano gimtinė

    Ačiū už jūsų pagalbą

  8.   Anoniminis sakė

    "\" Turite naudoti pasvirąjį brūkšnį prieš simbolius, dvigubai vartojamus @, #, kad jie būtų interpretuojami kaip tekstas.

  9.   gaba sakė

    Ir kaip man tai padaryti languose ????