Besedilo v datotekah zamenjajte z enim ukazom: perl

Včasih želimo zamenjati besedilo v datoteki, na primer spremeniti vse, kar v datoteki Document.txt pravi »moja družina«, v »nas« . Za to lahko uporabimo svoj najljubši urejevalnik besedil (Kate, Gedit, Sublime Text itd.), vendar je vedno dobro poznati alternative, druge načine za dosego istega rezultata.

Izkazalo se je, da je to mogoče doseči z regularnimi izrazi ; ukaz `sed` je preprosto veličasten, ima neskončne različice in možnosti, ampak ... za tiste, ki želijo besedilo zamenjati le na najmanj zapleten možen način , vam prinašam to veliko preprostejšo različico:

Po primeru imamo datoteko Document.txt , ki se nahaja v $HOME/Document.txt in vsebuje naslednje besedilo:

Moja družina je kot vse druge, kot tvoja ali družina tvojega soseda. Pravzaprav se moja družina trudi biti odgovorni ljudje v očeh družbe, politično in družbeno korektni. Vendar pa je v moji hiši črna ovca in to je moja vloga, LOL! Vedno sem bil tisti, ki se ne boji povedati, kar mislim (tudi če ni družbeno sprejemljivo), čeprav je moja družina v resnici sita današnje zmešane družbe.

Naslednji ukaz bo spremenil » moja družina « v » nas «:

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

Tako preprosto je 

Besedilo bi torej bilo:

(…) smo kot vsi drugi, kot vaši ali vaši sosedje. Pravzaprav se trudimo biti odgovorni ljudje v očeh družbe, politično in družbeno korektni. Vendar pa je v moji hiši črna ovca in to je moja vloga, LOL! Vedno sem bil tisti, ki se ne boji povedati, kar mislim (tudi če se v očeh družbe ne zdi pravilno), čeprav je v resnici moja družina sita umazanije današnje družbe.

Sintaksa je:

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

Ukaz se morda zdi nekoliko zapleten, zato ga nekoliko razčlenimo in razložimo nekoliko preprosteje 

  • perl : Kaj bomo uporabili, perl
  • -pi : Pí, kako π (približna vrednost 3.14)
  • -e : E si predstavljajo, da bi "e izvršil" ^ - ^
  • Potem v narekovajih » odpremo z s in zapremo z g: "sg" …predstavljajte si S za Start in G za Game Over 
  • Zavijte med sg postaviti moramo dva sklopa oklepajev: [] y [], biti tak: "S [] [] g"
  • Znotraj prvih oklepajev, kot sem rekel zgoraj, bo šlo besedilo, ki ga želimo odstraniti in nadomestiti z novim, v drugem naboru oklepajev pa novo besedilo, ki ga bomo postavili, po zgledu: "S [moja družina] [mi] g"

Preprosto, kajne?

Razlaga je pravzaprav veliko daljša od tistega, kar je potrebno za ukaz, razumeti jo je precej preprosto 

Perl je veliko, veliko več kot le način zamenjave besedila, je cel jezik 

Če želite izvedeti več o tem, namestite paket perl-doc in si oglejte vse, kar omogoča; to je preprosto drugačno vesolje.

Mimogrede in če želite zapreti, ob predpostavki, da želite najti vse datoteke .txt, ki jih imate v $ HOME / Documents /, in v vsaki zamenjati "moja družina" z "mi", se lahko pridružite find + perl, da to dosežete:

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

Ali z uporabo nadomestnega znaka:

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

Težava pri tej drugi različici je, da ne bo nadomestila datotek, ki so v podmapah 

Kakorkoli, upam, da vam je bilo zanimivo. Zame je bilo zelo koristno, zdaj lahko zamenjam besedilo neposredno iz terminala ... super! 


Dodaj kot prednostni vir v Googlu