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!