În anumite ocazii dorim să înlocuim textul dintr-un fișier, de exemplu, să modificăm Document.txt tot ce spune „familia mea” pentru „noi”. Pentru a realiza acest lucru, putem folosi editorul de text preferat (Kate, Gedit, SublimeText etc.), dar este întotdeauna bine să cunoaștem variante, alte modalități de a obține același rezultat 🙂
Se întâmplă asta cu expresii obisnuite puteți obține acest lucru, comanda sed este pur și simplu magnifică, are variante și opțiuni nesfârșite, dar ... pentru cei care doresc doar să înlocuiască textul din cel mai puțin complex mod posibil, pentru ei este că aduc această variantă mult mai simplă:
Urmând exemplul, avem fișierul Document.txt situat în $ HOME / Document.txt cu următorul text:
(...) familia mea Este ca toate, ca ale tale sau ale vecinului tău. De fapt familia mea Încercăm să fim oameni responsabili și în ochii societății, politici și sociali corecți. Cu toate acestea, în casa mea există o oaie neagră, și acesta este rolul meu LOL!. Am fost întotdeauna cel care nu se teme să spună ce crede (chiar dacă aparent nu este corect în ochii societății), deși în realitate familia mea este sătulă de
murdăriesocietatea de astăzi.
Cu următoarea comandă veți schimba «familia mea" de "ne„:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Este atât de simplu 🙂
Deci, textul ar fi:
(...) ne Este ca toate, ca ale tale sau ale vecinului tău. De fapt ne Încercăm să fim oameni responsabili și în ochii societății, politici și sociali corecți. Cu toate acestea, în casa mea există o oaie neagră, și acesta este rolul meu LOL!. Am fost întotdeauna cel care nu se teme să spună ce crede (chiar dacă aparent nu este corect în ochii societății), deși în realitate familia mea este sătulă de
murdăriesocietatea de astăzi.
Sintaxa este:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Comanda poate părea puțin complexă, să o descompunem puțin și să o explicăm puțin mai simplu 😉
- perl : Ce vom folosi, perl
- -pi : Pí, cum π (valoarea aproximativă de 3.14)
- -e : E imaginează-l pentru «e să execute» ^ - ^
- Apoi între ghilimele » deschidem cu o s și închidem cu o g: „sg” … Imaginați-vă S pentru Start și G pentru Game Over 😀
- Întoarceți-vă între sg trebuie să punem două seturi de paranteze: [] y [], fiind așa: „S [] [] g”
- În interiorul primelor paranteze, așa cum am spus mai sus, textul pe care dorim să-l eliminăm și să-l înlocuim cu unul nou va merge, în timp ce în al doilea set de paranteze noul text de pus va merge, urmând exemplul: „S [familia mea] [noi] g”
Simplu, nu-i așa?
Explicația este de fapt mult mai extinsă decât ceea ce este necesar pentru comandă, este destul de simplu de înțeles 🙂
Perl este mult, mult mai mult decât o simplă modalitate de a înlocui textul, este o limbă întreagă 😉
Dacă doriți să aflați mai multe despre aceasta, instalați pachetul perl-doc și aruncă o privire la cine îi permite, este doar un alt univers.
Apropo și pentru a închide, presupunând că doriți să găsiți toate fișierele .txt pe care le aveți în $ HOME / Documents / și în fiecare să înlocuiți „familia mea” cu „noi”, vă puteți alătura find + perl pentru a realiza acest lucru:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Sau folosind un wildcard:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Problema cu această a doua variantă este că nu se va înlocui în fișierele din subfoldere f
Oricum, sper că ți s-a părut interesant. Pentru mine a fost foarte util, pot înlocui deja textul direct de la terminal ... minunat! 😀
Ei bine, cred că mulți dintre noi de aici știm comanda sed, care are același scop, o face mult mai bună și este mai ușor de utilizat ...
Multumesc pentru comentariul tau,
Doar două detalii, de ce spuneți că sedul o face mai bună? Este într-adevăr mai ușor de utilizat cu atâtea personaje „ciudate”?
Salutari tuturor!!!. Am folosit comanda sete, iar metoda descrisă aici cu perl este mai simplă. Mulțumesc KZKG ^ Gaara !!!.
Mulțumesc pentru comentariu 🙂
Ei bine, cel puțin mi se pare că este mai simplu decât expresiile obișnuite ... că, cu atâtea personaje „ciudate”, se poate face ceva cu adevărat complex de înțeles și învățat celor care nu sunt pricepuți.
Există un adagiu „vechi” acolo: „Am avut o problemă, am decis să folosesc Expresii regulate ... acum am DOUĂ probleme” 😉
HAHAHAHAHAHAHA !!!
Expresiile regulate ne pot salva viețile la un moment dat ... da, este nevoie de mult timp să învățăm cum să le folosim și să nu murim încercând.
Dacă aș fi cunoscut această comandă cu ani în urmă, DUMNEZEU !! cât de simplă ar fi fost viața mea 😀
Clar! Bine manipulate, acestea sunt foarte puternice 🙂 Nimic mai bun pentru a manipula textul. Dar uneori, după cum spuneți în acest caz cu Perl, nu trebuie să mergeți atât de departe dacă este suficientă o înlocuire.
Aș fi folosit oricum Python :)
Dar de sete o văd și mai simplu ... fac ceva greșit?
sed -i "if / what-I-want-to-change / What's-new-to-put /" file-in-which-to-replace
heh heh ... și dacă vreau să înlocuiesc „http://my.blog.com/content/” cu „http://my.blog.com/uploads/files/” 😀 ... deja acolo ai a pune \ cu spații și altele, și devine complex sau nu?
Nu este obligatoriu să utilizați / ca separator. Uită-te cu +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fișier
O_O ... WTF!
Mi-ai deschis acum un întreg univers de opțiuni .. O_O
Îmi plac aceste postări în care toți învățăm ceva 🙂
Nici eu nu știam asta.
Prefer să folosesc direct vi ..
La fel de simplu ca și:
:% s / noi / familia mea / g
% -> întreg document
s -> căutare
g -> toate aparițiile
Salutări de ..
Vă mulţumim!
Nu am știut să o fac cu vi
Adăugat la favorite!
Vă mulţumim!
Aruncați o privire dacă aveți puțin din comanda rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Intrare excelentă! În cazul în care cineva este interesat, același lucru cu comanda Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Și ce se întâmplă dacă în fișier ceea ce vreau să înlocuiesc are ghilimele?
Exemplu înlocuiește ceea ce spune text: »1 ″ cu text:» 2 ″
cum ar fi comanda?
Alo
Am vrut să înlocuiesc un șir care avea un @ în mijloc și să schimbe textul doar cu înainte de at.
text de schimbat: Viva el Perú
text nou: Viva mi patria @percysalgado
Se arată: Trăiască patria mea
Multumesc pentru ajutor
„\” Trebuie să utilizați bară înainte de caractere cu dublă utilizare @, #, astfel încât să fie interpretate ca text.
Și cum o fac în Windows ????