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

Dažos gadījumos mēs vēlamies aizstāt tekstu failā, piemēram, mainīt Document.txt viss, ko “mana ģimene” saka par “mums”. Lai to panāktu, mēs varam izmantot mūsu vēlamo teksta redaktoru (Kate, Gedit, SublimeText utt.), Taču vienmēr ir labi zināt variantus, citus veidus, kā sasniegt to pašu rezultātu 🙂

Gadās, ka ar regulāras izteiksmes jūs to varat sasniegt, sed komanda ir vienkārši lieliska, tai ir bezgalīgi daudz variantu un iespēju, bet ... tiem, kas vienkārši vēlas aizstāt tekstu no iespējami sarežģītākā veidā, viņiem ir tas, ka es piedāvāju šo daudz vienkāršāko variantu:

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

(...) mana ģimene tas ir tāpat kā visiem viņiem, tāpat kā jūsu vai jūsu kaimiņa. Patiesībā mana ģimene Mēs cenšamies būt atbildīgi cilvēki un sabiedrības acīs politiski un sociāli korekti. Tomēr manā mājā ir melna aita, un tā ir mana loma. Es vienmēr esmu bijis tas, kurš nebaidās pateikt to, ko domā (pat ja tas acīmredzami nav pareizi sabiedrības acīs), lai gan patiesībā manai ģimenei ir apnicis netīrumi mūsdienu sabiedrība.

Ar šādu komandu jūs mainīsit «mana ģimene"by"mums":

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

Tas ir tik vienkārši 🙂

Tātad teksts būtu šāds:

(...) mums tas ir tāpat kā visiem viņiem, tāpat kā jūsu vai jūsu kaimiņa. Patiesībā mums Mēs cenšamies būt atbildīgi cilvēki un sabiedrības acīs politiski un sociāli korekti. Tomēr manā mājā ir melna aita, un tā ir mana loma. Es vienmēr esmu bijis tas, kurš nebaidās pateikt to, ko domā (pat ja tas acīmredzami nav pareizi sabiedrības acīs), lai gan patiesībā manai ģimenei ir apnicis netīrumi mūsdienu sabiedrība.

Sintakse ir:

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

Komanda var šķist mazliet sarežģīta, nedaudz sadalīsim un nedaudz vienkāršāk izskaidrosim 😉

  • 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 S sākumam un G spēles beigām 😀
  • 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 plašāks nekā komandai nepieciešamais, to saprast ir pavisam vienkārši 🙂

Perls ir daudz, daudz vairāk nekā veids, kā aizstāt tekstu, tā ir visa valoda 😉

Ja vēlaties uzzināt vairāk par to, instalējiet pakotni perl-doc un ieskatieties to, ko tas atļauj, tas ir tikai cits Visums.

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

Šī otrā varianta problēma ir tā, ka tas neaizstās failos, kas atrodas apakšmapēs 🙂

Jebkurā gadījumā es ceru, ka jums tas šķita interesanti. Man tas ir bijis patiešām noderīgs, es jau tagad varu aizstāt tekstu tieši no termināla ... lieliski! 😀


21 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Boom teica

    Nu, es domāju, ka daudzi no mums šeit zina komandu sed, kas kalpo vienam un tam pašam mērķim, to dara daudz labāk un to ir vieglāk izmantot ...

    1.    KZKG ^ Gaara teica

      Paldies par jūsu komentāru,
      Tikai divas detaļas, kāpēc jūs sakāt, ka sed padara to labāku? Vai tiešām to ir vieglāk izmantot ar tik daudziem “dīvainiem” varoņiem?

  2.   Federiko A. Valdés Toujague teica

    Sveiciens visiem !!!. Esmu izmantojis komandu slāpes, un šeit aprakstītā metode ar perl ir vienkāršāka. Paldies KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara teica

      Paldies par komentāru 🙂
      Nu, vismaz man šķiet, ka tas ir vienkāršāk nekā parastie izteicieni ... ka ar tik daudziem “dīvainiem” varoņiem nezinošajiem var izdarīt kaut ko patiešām sarežģītu, lai saprastu un iemācītos.

      1.    Giskards teica

        Tur ir "vecs" teiciens: "Man bija problēma, es nolēmu izmantot regulāras izteiksmes ... tagad man ir DIVAS problēmas" 😉

        1.    KZKG ^ Gaara teica

          HAHAHAHAHAHAHA !!!
          Regulāri izteicieni noteiktā brīdī var glābt mūsu dzīvības ... jā, ir vajadzīgs ilgs laiks, lai uzzinātu, kā tos izmantot un nemirst, mēģinot nomirt.

          Ja es būtu zinājis šo komandu pirms gadiem, DIEVS !! cik vienkārša mana dzīve būtu bijusi 😀

          1.    Giskards teica

            Skaidrs! Labi apstrādāti tie ir ļoti spēcīgi. Nekas nav labāks, lai manipulētu ar tekstu. Bet dažreiz, kā jūs sakāt šajā gadījumā ar Perlu, jums nav tik tālu jāiet, ja pietiek ar aizstājēju.
            Es tik un tā būtu izmantojis Python :)

    2.    dunter teica

      Bet slāpēs es to redzu vēl vienkāršāk ... vai es daru kaut ko nepareizi?

      sed -i "ja / ko-es-gribu mainīt / kas-jauns-kas jāievieto /" fails-kurā-aizvietot

      1.    KZKG ^ Gaara teica

        heh heh ... un, ja es gribu aizstāt "http://my.blog.com/content/" ar "http://my.blog.com/uploads/files/" 😀 ... jau tur ir jāievieto \ ar atstarpēm un citiem , un tas kļūst sarežģīts vai nē?

        1.    dunter teica

          Nav obligāti izmantot / kā atdalītāju. Skatieties ar +

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

          1.    KZKG ^ Gaara teica

            O_O ... WTF!
            Jūs man tagad esat atvēris veselu iespēju variantu .. O_O

          2.    Giskards teica

            Man patīk šie ieraksti, kur mēs visi kaut ko iemācāmies 🙂
            Es arī to nezināju.

  3.   RAW-Basic teica

    Es gribētu izmantot tieši vi ..

    Tik vienkārši, kā:
    :% s / us / mana ģimene / g

    % -> viss dokuments
    s -> meklēt
    g -> visi gadījumi

    Sveicieni ..

    1.    KZKG ^ Gaara teica

      Paldies!
      Es nezināju, kā to izdarīt ar vi

  4.   str0rmt4il teica

    Pievienots izlasei!

    Paldies!

  5.   DuranG teica

    Lielisks ieraksts! Gadījumā, ja kāds ir ieinteresēts, tas pats ar komandu Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Šaubos teica

      Un kas notiek, ja failā, ko es gribu aizstāt, ir pēdiņas?
      Teksta teikuma aizstājējs: »1 ″ ar tekstu:» 2 ″
      kā būtu komanda?

  6.   Pērsijs salgado teica

    hola

    Es gribēju nomainīt virkni, kuras vidū bija @ un kura tekstu tikai mainīja uz pirms at.

    maināms teksts: Viva el Perú
    jauns teksts: Viva mi patria @percysalgado
    Parādīts: Lai dzīvo mana dzimtene

    Paldies par jūsu palīdzību

  7.   anonīms teica

    "\" Jums jāizmanto slīpsvītra pirms rakstzīmēm ar divkāršu lietojumu @, #, lai tās tiktu interpretētas kā teksts.

  8.   GABA teica

    Un kā es to varu izdarīt logos ????