Ob določenih primerih želimo zamenjati besedilo v datoteki, na primer spremeniti datoteko Document.txt vse, kar "moja družina" govori za "nas". Da bi to dosegli, lahko uporabimo želeni urejevalnik besedil (Kate, Gedit, SublimeText itd.), Vendar je vedno dobro poznati različice in druge načine za doseganje enakega rezultata
Zgodi se, da s regularni izrazi to lahko dosežete, ukaz sed je preprosto čudovit, ima nešteto različic in možnosti, ampak ... za tiste, ki želijo samo zamenjati besedilo iz najmanj zapleten način, zanje prinašam to veliko preprostejšo različico:
Po zgledu imamo datoteko Document.txt ki se nahaja v $ HOME / Document.txt z naslednjim besedilom:
(...) moja družina Podobno je vsem, tako kot vašemu ali sosedovemu. Pravzaprav moja družina Trudimo se biti odgovorni ljudje in v očeh družbe politično in družbeno korektni. Vendar je v moji hiši črna ovca in to je moja vloga LOL! Vedno sem bil tisti, ki se ne boji povedati, kar misli (čeprav očitno v očeh družbe ni očitno pravilno), čeprav je v resnici moja družina sita
umazanijodanašnja družba.
Z naslednjim ukazom boste spremenili «moja družina"avtor"nam":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Tako preprosto je 🙂
Besedilo bi torej bilo:
(...) nam Podobno je vsem, tako kot vašemu ali sosedovemu. Pravzaprav nam Trudimo se biti odgovorni ljudje in v očeh družbe politično in družbeno korektni. Vendar je v moji hiši črna ovca in to je moja vloga LOL! Vedno sem bil tisti, ki se ne boji povedati, kar misli (čeprav očitno v očeh družbe ni očitno pravilno), čeprav je v resnici moja družina sita
umazanijodanašnja družba.
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, razčlenimo ga 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 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 obsežnejša od tiste, ki je potrebna za ukaz, razumljiva je povsem enostavno 🙂
Perl je veliko več kot le način, kako nadomestiti besedilo, je cel jezik 😉
Če želite o tem izvedeti več, namestite paket perl-dok in si oglejte, kdo sploh dopušča, to je samo drugo 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 te druge različice je, da ne bo zamenjala datotek v podmapah ers
Kakorkoli, upam, da se vam je zdelo zanimivo. Zame je bilo zelo koristno, besedilo lahko že zamenjam neposredno s terminala ... super! 😀
No, mislim, da mnogi od nas tukaj poznamo ukaz sed, ki služi istemu namenu, je veliko boljši in enostavnejši za uporabo ...
Hvala za vaš komentar,
Samo dve podrobnosti, zakaj pravite, da sed izboljša? Je res lažje uporabljati s toliko 'čudnimi' znaki?
Lep pozdrav vsem !!!. Uporabil sem ukaz žeja, in tukaj opisana metoda s perl je preprostejša. Hvala KZKG ^ Gaara !!!.
Hvala za komentar 🙂
No, vsaj zdi se mi, da je to bolj preprosto kot regularni izrazi ... da je s toliko "čudnimi" liki mogoče nekaj nenavadnega razumeti in naučiti.
Obstaja "stari" pregovor: "Imel sem težavo, odločil sem se za uporabo regularnih izrazov ... zdaj imam DVE težavi" 😉
HAHAHAHAHAHAHA !!!
Regularni izrazi nam lahko v določenem trenutku rešijo življenje ... ja, dolgo je, da se naučimo, kako jih uporabljati in ne umremo, ko poskušamo.
Če bi ta ukaz poznal že pred leti, BOG !! kako preprosto bi bilo moje življenje 😀
Jasno! Če jih dobro obvladate, so zelo zmogljivi. A včasih, kot pravite v tem primeru pri Perlu, ni treba iti tako daleč, če je zamenjava dovolj.
Vseeno bi uporabil Python :)
Toda na žeji se mi zdi še bolj preprosto ... ali delam kaj narobe?
sed -i "če / kaj-želim-spremeniti / kaj-novega-postaviti /" datoteko-v-katero-zamenjati
heh heh ... in če želim "http://my.blog.com/content/" nadomestiti z "http://my.blog.com/uploads/files/" 😀 ... že imate postaviti \ s presledki in drugimi, in postane zapleteno ali ne?
Ni obvezno uporabljati / kot ločilo. Poglej s +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» datoteka
O_O ... WTF!
Zdaj ste mi odprli celo vesolje možnosti .. O_O
Všeč so mi te objave, kjer se vsi nekaj naučimo 🙂
Tudi tega nisem vedel.
Raje uporabljam neposredno vi ..
Tako preprosto kot:
:% s / us / moja družina / g
% -> celoten dokument
s -> iskanje
g -> vse pojavitve
Lep pozdrav ..
Hvala!
Nisem vedel, kako naj to storim z vi
Dodano med priljubljene!
Hvala!
Oglejte si, če imate malo ukaza rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Odličen vstop! V primeru, da koga zanima, enako z ukazom Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
In kaj se zgodi, če je v datoteki, kar želim zamenjati, narekovaji?
Primer zamenjajte besedilo: »1 2 z besedilom:» XNUMX ″
kako bi bil ukaz?
Pozdravljeni
Želel sem zamenjati niz, ki je imel v sredini @ in je samo spremenil besedilo v at pred.
besedilo za spremembo: Živel Peru
novo besedilo: Viva mi patria @percysalgado
Prikazano: Živela moja domovina
Hvala za vašo pomoč
"\" Poševnico morate uporabiti pred znaki z dvojno uporabo @, #, tako da bodo interpretirani kot besedilo.
In kako to naredim v oknih ????