U određenim prilikama želimo zamijeniti tekst u datoteci, na primjer, promijeniti u Document.txt sve što kaže "moja obitelj" za "nas". Da bismo to postigli možemo koristiti naš omiljeni uređivač teksta (Kate, Gedit, SublimeText, itd.), ali uvijek je dobro znati varijante, druge načine za postizanje istog rezultata
Dogodi se da sa regularni izrazi to možete postići, naredba sed je jednostavno veličanstvena, ima bezbroj varijanti i opcija, ali ... za one koji samo žele zamijeniti tekst iz najmanje složen mogući način, za njih donosim ovu puno jednostavniju varijantu:
Slijedeći primjer, imamo datoteku Document.txt smješten u $ HOME / Document.txt sa sljedećim tekstom:
(...) moja obitelj Kao i svi oni, poput vašeg ili vašeg susjeda. Zapravo moja obitelj Trudimo se biti odgovorni ljudi i u očima društva politički i socijalno korektni. Međutim, u mojoj kući je crna ovca, i to je moja uloga LOL! Oduvijek sam bila ta koja se ne boji reći ono što misli (čak i ako to očito nije točno u očima društva), iako je u stvarnosti mojoj obitelji dosta
prljavštinadanašnje društvo.
Sljedećom naredbom promijenit ćete «moja obitelj"od"mi„:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Tako je jednostavno
Dakle, tekst bi bio:
(...) mi Kao i svi oni, poput vašeg ili vašeg susjeda. Zapravo mi Trudimo se biti odgovorni ljudi i u očima društva politički i socijalno korektni. Međutim, u mojoj kući je crna ovca, i to je moja uloga LOL! Oduvijek sam bila ta koja se ne boji reći ono što misli (čak i ako to očito nije točno u očima društva), iako je u stvarnosti mojoj obitelji dosta
prljavštinadanašnje društvo.
Sintaksa je:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Naredba se može činiti malo složenom, hajmo je malo raščlaniti i objasniti malo jednostavnije
- perl : Što ćemo koristiti, perl
- -pi : Pí, kako π (približna vrijednost 3.14)
- -e : E zamišljaju da «e izvrši» ^ - ^
- Zatim pod navodnicima » otvaramo s s i zatvaramo s a g: "sg" …zamislite S za početak i G za kraj igre
- Skrenite između sg moramo staviti dva skupa zagrada: [] y [], biti takav: "S [] [] g"
- Unutar prvih zagrada, kao što sam gore rekao, ići će tekst koji želimo ukloniti i zamijeniti novim, dok će u drugi set zagrada ići novi tekst, slijedeći primjer: "S [moja obitelj] [mi] g"
Jednostavno zar ne?
Objašnjenje je zapravo puno duže od onoga što je potrebno za naredbu, vrlo je jednostavno za razumjeti
Perl je puno, puno više od načina zamjene teksta, to je cijeli jezik
Ako želite saznati više o tome, instalirajte paket perl-dok i pogledajte whooodo što to dopušta, to je samo drugi svemir.
Usput i zatvoriti, pod pretpostavkom da želite pronaći sve .txt datoteke koje imate u $ HOME / Documents / i u svakoj zamijeniti "moja obitelj" s "mi", možete se pridružiti find + perl da biste to postigli:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Ili pomoću zamjenskog znaka:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Problem s ovom drugom varijantom je taj što neće zamijeniti datoteke koje se nalaze u podmapama
U svakom slučaju, nadam se da vam je bilo zanimljivo. Za mene je bilo stvarno korisno, sada mogu zamijeniti tekst izravno s terminala... super!
Pa, mislim da mnogi od nas ovdje znaju naredbu sed, koja ima istu svrhu, čini to puno bolje i jednostavnija je za upotrebu ...
Hvala na komentaru,
Samo dva detalja, zašto kažete da ga sed čini boljim? Je li doista lakše koristiti s toliko 'čudnih' likova?
Pozdrav svima!!!. Koristio sam naredbu žeđ, a ovdje opisana metoda s perlom je jednostavnija. Hvala KZKG ^ Gaara !!!.
Hvala na komentaru 🙂
Pa, barem mi se čini da je ovo jednostavnije od regularnih izraza ... da se s toliko 'čudnih' likova može učiniti nešto stvarno složeno za razumijevanje i učenje nesavjesnima.
Postoji "stara" poslovica: "Imao sam problem, odlučio sam koristiti Regularne izraze ... sada imam DVA problema"
HAHAHAHAHAHAHA !!!
Regularni izrazi mogu nam spasiti život u određenom trenutku ... da, treba puno vremena da naučimo kako ih koristiti i ne umiremo pokušavajući.
Da sam znao ovu zapovijed prije godina, BOG !! kako bi moj život bio jednostavan 😀
Čisto! Dobro obrađeni, vrlo su moćni 🙂 Ništa bolje za manipuliranje tekstom. Ali ponekad, kao što kažete u ovom slučaju s Perlom, ne morate ići tako daleko ako je zamjena dovoljna.
Ionako bih koristio Python :)
Ali u žeđi to vidim još jednostavnije ... radim li nešto krivo?
sed -i "ako / što-želim-promijeniti / novo-staviti /" datoteku-u-koju-zamijeniti
heh heh ... i ako želim zamijeniti "http://my.blog.com/content/" sa "http://my.blog.com/uploads/files/" 😀 ... već ste tu staviti \ s razmacima i drugima, a postaje složeno ili ne?
Nije obvezno koristiti / kao separator. Pogledajte sa +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» datoteka
O_O ... WTF!
Sad ste mi otvorili čitav svemir mogućnosti .. O_O
Volim ove postove u kojima svi nešto naučimo 🙂
Ni to nisam znao.
Radije koristim izravno vi ..
Jednostavno kao:
:% s / nas / moja obitelj / g
% -> cijeli dokument
s -> pretraga
g -> sve pojave
Pozdrav ..
Gracias!
Nisam znao kako se to radi sa vi
Dodano u favorite!
Gracias!
Pogledajte ga ako imate malo naredbe rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Odličan ulaz! U slučaju da nekoga zanima, isto je i s naredbom Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
A što se događa ako unutar datoteke ono što želim zamijeniti sadrži navodnike?
Primjer zamijenite ono što kaže tekst: »1 ″ tekstom:» 2 ″
kakva bi bila naredba?
Bok
Htio sam zamijeniti niz koji je imao @ u sredini i samo je promijenio tekst prije at.
tekst za promjenu: Živio Peru
novi tekst: Viva mi patria @percysalgado
Prikazano: Živjela moja domovina
Hvala na pomoći
"\" Morate koristiti kosu crtu prije znakova s dvostrukom upotrebom @, #, tako da se protumače kao tekst.
I kako to mogu učiniti u prozorima ????