Zamijenite tekst u datotekama samo jednom naredbom: perl

Ponekad želimo zamijeniti tekst unutar datoteke, na primjer, mijenjajući sve što piše "moja porodica" sa "nas" u Document.txt . Da bismo to učinili, možemo koristiti naš preferirani uređivač teksta (Kate, Gedit, Sublime Text, itd.), ali uvijek je dobro znati alternative, druge načine za postizanje istog rezultata.

Ispostavilo se da se to može postići regularnim izrazima ; naredba `sed` je jednostavno veličanstvena, ima beskrajne varijacije i opcije, ali... za one koji samo žele zamijeniti tekst na najmanje složen mogući način , donosim vam ovu mnogo jednostavniju varijantu:

Slijedeći primjer, imamo datoteku Document.txt koja se nalazi u $HOME/Document.txt sa sljedećim tekstom:

Moja porodica je kao i svaka druga, kao tvoja ili porodica tvog komšije. Zapravo, moja porodica se trudi da bude odgovoran narod u očima društva, politički i društveno korektan. Međutim, postoji crna ovca u mojoj kući, i to je moja uloga, LOL! Uvijek sam bio taj koji se ne boji reći šta misli (čak i ako to nije društveno prihvatljivo), iako je u stvarnosti moja porodica sita današnjeg poremećenog društva.

Sljedeća naredba će promijeniti " moja porodica " u " nas ":

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

To je tako jednostavno 

Dakle, tekst bi bio:

(...) mi smo kao i svi ostali, kao vaši ili vaši susjedi. Zapravo, trudimo se biti odgovorni ljudi u očima društva, politički i društveno korektni. Međutim, postoji crna ovca u mojoj kući, i to je moja uloga, LOL! Uvijek sam bio taj koji se ne boji reći šta misli (čak i ako to naizgled nije ispravno u očima društva), iako je u stvarnosti moja porodica sita prljavštine današnjeg društva.

Sintaksa je:

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

Naredba može izgledati malo složeno, hajde da je malo rastavite i objasnimo je malo jednostavnije 

  • Perl : Šta ćemo koristiti, perl
  • -pi : Pí, kako π (približna vrijednost 3.14)
  • -e : E zamišljaju da «e izvrši» ^ - ^
  • Zatim pod navodnicima » otvaramo s s i zatvaramo s g: "sg" …zamislite S za početak i G za kraj igre 
  • Skrenite između sg moramo staviti dva seta zagrada: [] y [], biti takav: "S [] [] g"
  • Unutar prvih zagrada, kao što sam gore rekao, ići će tekst koji želimo ukloniti i zamijeniti novim, dok će u drugi set zagrada ići novi tekst koji slijedi, slijedeći primjer: "S [moja porodica] [mi] g"

Jednostavno, zar ne?

Objašnjenje je zapravo mnogo duže od onoga što je potrebno za naredbu, prilično je jednostavno za razumjeti 

Perl je mnogo, mnogo više od načina za zamjenu teksta, on je cijeli jezik 

Ako želite saznati više o tome, instalirajte perl-doc paket i pogledajte sve što on omogućava; to je jednostavno drugačiji univerzum.

Usput i da zatvorite, pod pretpostavkom da želite pronaći sve .txt datoteke koje imate u $ HOME / Documents / i u svakoj zamijeniti "moja porodica" sa "mi", možete se pridružiti find + perl da biste to postigli:

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

Ili pomoću zamjenskog znaka:

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

Problem sa ovom drugom varijantom je što neće zamijeniti datoteke koje se nalaze u podfolderima 

U svakom slučaju, nadam se da vam je bilo zanimljivo. Za mene je to bilo zaista korisno, sada mogu zamijeniti tekst direktno sa terminala... super! 


Dodaj kao preferirani izvor na Googleu