U određenim prilikama želimo zamijeniti tekst u datoteci, na primjer, promijeniti u Document.txt sve što "moja obitelj" govori za "nas". Da bismo to postigli možemo koristiti naš preferirani uređivač teksta (Kate, Gedit, SublimeText itd.), Ali uvijek je dobro znati varijante i 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
To je tako 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 pomalo složenom, razložimo je malo i objasnimo 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 Start i G za Game Over 😀
- 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 opsežnije od onoga što je potrebno za naredbu, vrlo je jednostavno razumjeti 🙂
Perl je mnogo, puno više od samo načina da zamijeni tekst, 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 se neće zamijeniti u datotekama koje se nalaze u podmapama
Svejedno, nadam se da vam je bilo zanimljivo. Za mene je to bilo jako korisno, već mogu zamijeniti tekst izravno s terminala ... sjajno! 😀
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 ????