Text vo vnútri súborov môžete nahradiť jediným príkazom: perl

Pri určitých príležitostiach chceme nahradiť text v súbore, napríklad zmena v Document.txt všetko, čo „moja rodina“ hovorí za „nás“. Aby sme to dosiahli, môžeme použiť náš preferovaný textový editor (Kate, Gedit, SublimeText atď.), Ale vždy je dobré poznať varianty, iné spôsoby, ako dosiahnuť rovnaký výsledok 🙂

Stáva sa, že s regulárne výrazy to sa dá dosiahnuť, príkaz sed je jednoducho nádherný, má nekonečné varianty a možnosti, ale ... pre tých, ktorí chcú iba nahradiť text z najmenej zložitý možný spôsob, pre nich je to, že prinášam tento oveľa jednoduchší variant:

Podľa príkladu máme súbor Document.txt nachádza sa v $ HOME / Document.txt s nasledujúcim textom:

(...) moja rodina Je to ako všetky, ako vaše alebo susedove. v skutočnosti moja rodina Snažíme sa byť zodpovední a v očiach spoločnosti politicky a spoločensky korektní. V mojom dome je však čierna ovca, a to je moja rola LOL!. Vždy som bol ten, kto sa nebojí povedať, čo si myslí (aj keď to v očiach spoločnosti nie je zjavne správne), aj keď v skutočnosti má rodina dosť špina dnešná spoločnosť.

Pomocou nasledujúceho príkazu zmeníte «moja rodina„používateľom“nám,:

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

Je to také jednoduché 🙂

Text by teda bol:

(...) nám Je to ako všetky, ako vaše alebo susedove. v skutočnosti nám Snažíme sa byť zodpovední a v očiach spoločnosti politicky a spoločensky korektní. V mojom dome je však čierna ovca, a to je moja rola LOL!. Vždy som bol ten, kto sa nebojí povedať, čo si myslí (aj keď to v očiach spoločnosti nie je zjavne správne), aj keď v skutočnosti má rodina dosť špina dnešná spoločnosť.

Syntax je:

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

Príkaz sa môže zdať trochu zložitý, poďme si ho trochu rozobrať a vysvetliť trochu jednoduchšie 😉

  • perl : Čo použijeme, perl
  • -pi : Pí, ako π (približná hodnota 3.14)
  • -e : E si to predstavuje pre «e na vykonanie» ^ - ^
  • Potom v úvodzovkách » otvárame s a s a uzavrieme s g: „sg“ … Predstavte si S pre štart a G pre koniec hry 😀
  • Otočte sa medzi sg musíme dať dve sady zátvoriek: [] y []takto: „S [] [] g“
  • Do prvých zátvoriek, ako som povedal vyššie, sa dostane text, ktorý chceme odstrániť a nahradiť novým, zatiaľ čo do druhej sady zátvoriek pôjde nový text, nasledujúci príklad: „S [moja rodina] [my] g“

Jednoduché, že?

Vysvetlenie je v skutočnosti oveľa rozsiahlejšie, ako je potrebné pre príkaz, je celkom ľahké ho pochopiť 🙂

Perl je oveľa, oveľa viac ako spôsob nahradenia textu, je to celý jazyk 😉

Ak sa o ňom chcete dozvedieť viac, nainštalujte si balík perl-doc a pozri sa na to, kto to umožňuje, je to len iný vesmír.

Mimochodom a na záver, za predpokladu, že chcete nájsť všetky súbory .txt, ktoré máte v $ HOME / Documents /, a v každom z nich nahradiť „moja rodina“ za „nás“, môžete sa pripojiť k find + perl, aby ste to dosiahli:

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

Alebo pomocou zástupného znaku:

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

Problém tohto druhého variantu spočíva v tom, že sa nebude nahrádzať v súboroch, ktoré sú v podpriečinkoch

Každopádne dúfam, že vás to zaujalo. Pre mňa to bolo naozaj užitočné, už viem nahradiť text priamo z terminálu ... super! 😀


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   výložník dijo

    Myslím, že mnohí z nás tu poznajú príkaz sed, ktorý slúži na ten istý účel, robí to oveľa lepšie a ľahšie sa používa ...

    1.    KZKG ^ Gaara dijo

      Ďakujeme za váš komentár,
      Iba dve podrobnosti, prečo hovoríte, že vďaka sedu je to lepšie? Je to skutočne jednoduchšie na použitie s toľkými „divnými“ postavami?

  2.   Federico A. Valdes Toujague dijo

    Pozdravujem všetkých!!!. Použil som príkaz smäd, a metóda tu opísaná s perlom je jednoduchšia. Vďaka KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara dijo

      Ďakujem za komentár 🙂
      Prinajmenšom sa mi to zdá jednoduchšie ako regulárne výrazy ... že s toľkými „podivnými“ postavami možno pre tých, ktorí nie sú dôvtipní, urobiť niečo, čo je skutočne zložité pochopiť a naučiť sa.

      1.    giskard dijo

        Existuje „staré“ porekadlo: «Mal som problém, rozhodol som sa použiť regulárne výrazy ... teraz mám DVA problémy» 😉

        1.    KZKG ^ Gaara dijo

          HAHAHAHAHAHAHAHA !!!
          Regulárne výrazy nám môžu v istej chvíli zachrániť život ... áno, trvá dlho, kým sa naučíme, ako ich používať, a nezomrieť pri pokuse.

          Keby som poznal tento príkaz pred rokmi, BOH !! aký jednoduchý by bol môj život 😀

          1.    giskard dijo

            Jasný! S dobrou manipuláciou sú veľmi výkonní 🙂 Nič lepšie na manipuláciu s textom. Ale niekedy, ako hovoríte v tomto prípade pre Perl, nemusíte ísť až tak ďaleko, ak stačí výmena.
            Aj tak by som použil Python :)

    2.    lovec dijo

      Ale v smäde to vidím ešte jednoduchšie ... robím niečo zle?

      sed -i „ak / čo chcem zmeniť / nové vložiť /“ súbor v ktorom nahradiť

      1.    KZKG ^ Gaara dijo

        heh heh ... a ak chcem nahradiť „http://my.blog.com/content/“ výrazom „http://my.blog.com/uploads/files/“ 😀 ... už tam máte dať \ s medzerami a inými, a stane sa to zložitým alebo nie?

        1.    lovec dijo

          Použitie / ako oddeľovača nie je povinné. Pozerajte s +

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

          1.    KZKG ^ Gaara dijo

            O_O ... WTF!
            Teraz ste mi otvorili celý vesmír možností .. O_O

          2.    giskard dijo

            Milujem tieto príspevky, kde sa všetci niečo naučíme 🙂
            To som tiež nevedel.

  3.   RAW-Basic dijo

    Radšej používam priamo vi ..

    Rovnako jednoduché ako:
    :% s / us / my family / g

    % -> celý dokument
    s -> hľadaj
    g -> všetky výskyty

    Zdravím ..

    1.    KZKG ^ Gaara dijo

      Vďaka!
      Nevedel som, ako to urobiť s vi

  4.   st0rmt4il dijo

    Pridané k obľúbeným!

    Vďaka!

  5.   DuranG dijo

    Skvelý vstup! V prípade, že má niekto záujem, to isté platí aj pre príkaz Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Pochybujem dijo

      A čo sa stane, ak v súbore, ktorý chcem nahradiť, mám úvodzovky?
      Príklad nahraďte text s textom: »1 ″ textom:» 2 ″
      aký by bol príkaz?

  6.   Percy salgado dijo

    Ahoj

    Chcel som nahradiť reťazec, ktorý mal v strede znak @ a zmenil iba text na znak pred zavináčom.

    text na zmenu: Nech žije Peru
    nový text: Viva mi patria @percysalgado
    Zobrazené: Nech žije moja vlasť

    Vďaka za vašu pomoc

  7.   Anonymný dijo

    „\“ Pred znakmi s dvojitým použitím @, # musíte použiť lomku, aby sa interpretovali ako text.

  8.   Gaba dijo

    A ako to urobím v oknách ????