Failos esošo tekstu aizstāj tikai ar vienu komandu: perl

Dažreiz mēs vēlamies aizstāt tekstu failā, piemēram, failā Document.txt visu, kas saka "mana ģimene", nomainot uz "mēs" . Lai to izdarītu, mēs varam izmantot mūsu iecienītāko teksta redaktoru (Kate, Gedit, Sublime Text utt.), taču vienmēr ir labi zināt alternatīvas, citus veidus, kā sasniegt to pašu rezultātu.

Izrādās, ka to var panākt ar regulārām izteiksmēm ; komanda `sed` ir vienkārši lieliska, tai ir bezgalīgas variācijas un opcijas, bet… tiem, kas vēlas aizstāt tekstu tikai pēc iespējas vienkāršākā veidā , piedāvāju šo daudz vienkāršāko variantu:

Sekojot piemēram, mums ir fails Document.txt, kas atrodas $HOME/Document.txt mapē ar šādu tekstu:

Mana ģimene ir tāda pati kā visiem pārējiem, kā tava vai tava kaimiņa. Patiesībā mana ģimene cenšas būt atbildīgi cilvēki sabiedrības acīs, politiski un sociāli korekti. Tomēr manā mājā ir viena melnā avs, un tā ir mana loma, LOL! Es vienmēr esmu bijusi tā, kas nebaidās pateikt, ko domāju (pat ja tas nav sociāli pieņemami), lai gan patiesībā mana ģimene ir nogurusi no mūsdienu haotiskās sabiedrības.

Šī komanda mainīs " my family " uz " us ":

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

Tas ir tik vienkārši

Tātad teksts būtu šāds:

(...) mēs esam tādi paši kā visi pārējie, tādi paši kā jūsējie vai jūsu kaimiņi. Patiesībā mēs cenšamies būt atbildīgi cilvēki sabiedrības acīs, politiski un sociāli korekti. Tomēr manā mājā ir viena melnā avs, un tā ir mana loma, LOL! Es vienmēr esmu bijusi tā, kas nebaidās pateikt, ko domāju (pat ja tas sabiedrības acīs nešķiet pareizi), lai gan patiesībā mana ģimene ir nogurusi no mūsdienu sabiedrības netīrībām .

Sintakse ir:

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

Komanda var šķist nedaudz sarežģīta, nedaudz sadalīsim to un paskaidrosim nedaudz vienkāršāk 

  • Perl : Ko mēs izmantosim, perl
  • -pī : Pí, kā π (aptuvenā vērtība 3.14)
  • -e : E to iedomājas, lai «e izpildītu» ^ - ^
  • Tad pēdiņās » mēs atveram ar s un mēs aizveramies ar g: "sg" …iedomājieties, ka S nozīmē Start un G nozīmē Game Over 
  • Pagriezieties starp sg mums ir jāievieto divi iekavu komplekti: [] y []tādā veidā: "S [] [] g"
  • Pirmajās iekavās, kā jau teicu iepriekš, tiks ievietots teksts, kuru mēs vēlamies noņemt un aizstāt ar jaunu, savukārt otrajā iekavu komplektā tiks ievietots jauns teksts, sekojot piemēram: "S [mana ģimene] [mēs] g"

Vienkārši, vai ne?

Paskaidrojums patiesībā ir daudz garāks, nekā nepieciešams komandai, to ir diezgan vienkārši saprast 

Perl ir daudz, daudz vairāk nekā veids, kā aizstāt tekstu, tā ir vesela valoda 

Ja vēlaties uzzināt vairāk, instalējiet perl-doc pakotni un apskatiet visu, ko tā atļauj; tā ir vienkārši cita pasaule.

Starp citu un aizverot, pieņemot, ka vēlaties atrast visus .txt failus, kas jums ir mapē $ HOME / Documents / un katrā no tiem aizstāt “mana ģimene” ar “mums”, varat pievienoties find + perl, lai to panāktu:

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

Vai arī aizstājējzīmi:

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

Problēma ar šo otro variantu ir tāda, ka tas neaizstās failus, kas atrodas apakšmapēs 

Jebkurā gadījumā es ceru, ka jums tas šķita interesanti. Man tas tiešām ir noderējis, tagad varu nomainīt tekstu tieši no termināļa... lieliski! 


Pievienot kā vēlamo avotu pakalpojumā Google