Teatud juhtudel soovime teksti failis asendada, näiteks muuta faili Document.txt kõik, mida "minu pere" ütleb "meie" eest. Selle saavutamiseks võime kasutada eelistatud tekstiredaktorit (Kate, Gedit, SublimeText jne), kuid alati on hea teada variante, muid võimalusi sama tulemuse saavutamiseks
See juhtub, et koos regulaarsed väljendid selle saavutate, sed-käsk on lihtsalt suurepärane, sellel on lõputud variandid ja võimalused, kuid ... neile, kes soovivad lihtsalt asendada teksti võimalikult keeruline, nende jaoks on see, et ma toon selle palju lihtsama variandi:
Eeskuju järgides on meil fail olemas Document.txt asub $ HOME / Document.txt järgmise tekstiga:
(...) minu perekond See on nagu kõik need, nagu teie või teie naabri oma. Tegelikult minu perekond Püüame olla vastutustundlikud inimesed ja ühiskonna silmis poliitiliselt ja sotsiaalselt korrektsed. Minu majas on siiski must lammas ja see on minu roll LOL! Olen alati olnud see, kes ei karda öelda, mida arvab (kuigi see pole ühiskonna silmis ilmselt õige), kuigi tegelikult on mu perel kõrini
mustustänapäeva ühiskond.
Järgmise käsuga muudate «minu perekond" kõrval "meile":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Nii lihtne see ongi 🙂
Nii et tekst oleks:
(...) meile See on nagu kõik need, nagu teie või teie naabri oma. Tegelikult meile Püüame olla vastutustundlikud inimesed ja ühiskonna silmis poliitiliselt ja sotsiaalselt korrektsed. Minu majas on siiski must lammas ja see on minu roll LOL! Olen alati olnud see, kes ei karda öelda, mida arvab (kuigi see pole ühiskonna silmis ilmselt õige), kuigi tegelikult on mu perel kõrini
mustustänapäeva ühiskond.
Süntaks on:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Käsk võib tunduda natuke keeruline, lagundame selle natuke ja selgitame seda veidi lihtsamalt 😉
- perl : Mida me kasutame, perl
- -pi : Pí, kuidas π (ligikaudne väärtus 3.14)
- -e : E kujutab ette, et «e täidaks» ^ - ^
- Siis jutumärkides » avame a-ga s ja lõpetame a g: "sg" ... Kujutage ette, et S on Start ja G - mängu lõpp 😀
- Pöörake sg peame panema kaks sulgude komplekti: [] y [], olles nii: "S [] [] g"
- Esimeste sulgude sees, nagu ma eespool ütlesin, läheb tekst, mille soovime eemaldada ja asendada uuega, samas kui teises sulgudes saab uue teksti panna, järgides eeskuju: "S [minu pere] [me] g"
Lihtne, kas pole?
Seletus on tegelikult palju ulatuslikum kui käsu jaoks vajalik, seda on üsna lihtne mõista 🙂
Perl on palju, palju enamat kui lihtsalt viis teksti asendamiseks, see on terve keel 😉
Kui soovite selle kohta lisateavet, installige pakett perl-doc ja heida pilk sellele, mida see lubab, see on lihtsalt teine universum.
Muide ja sulgemiseks, eeldades, et soovite leida kõik .txt-failid, mis teil on rakenduses $ HOME / Documents / ja asendada mõlema sõna "minu pere" sõnaga "meie", võite selle saavutamiseks liituda otsingu + perl abil:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Või asendusmärgi abil:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Selle teise variandi probleem on see, et see ei asenda alamkaustades olevaid faile 🙂
Igatahes loodan, et teile tundus see huvitav. Minu jaoks on see tõeliselt kasulik olnud, saan teksti juba terminalist vahetada ... super! 😀
Ma arvan, et paljud meist siin teavad sed-i käsku, mis täidab sama eesmärki, muudab selle palju paremaks ja seda on lihtsam kasutada ...
Täname kommentaari eest,
Ainult kaks detaili, miks te ütlete, et sed muudab selle paremaks? Kas seda on tõesti lihtsam kasutada nii paljude „imelike” tegelastega?
Tervitused kõigile !!!. Olen käsku kasutanud januja siin perliga kirjeldatud meetod on lihtsam. Aitäh KZKG ^ Gaara !!!.
Aitäh kommentaari eest 🙂
Noh, vähemalt minu jaoks tundub see lihtsam kui tavalised väljendid ... et nii paljude „imelike” tegelaskujudega saab mittetarkadele teha midagi tõeliselt keerulist, et seda mõista ja õppida.
Seal on «vana» kõnekäänd: «Mul oli probleem, otsustasin kasutada regulaaravaldisi ... nüüd on mul KAKS probleemi» 😉
HAHAHAHAHAHAHA !!!
Regulaarsed väljendid võivad teatud hetkel meie elu päästa ... jah, nende kasutamise õppimine ja mitte proovimisse suremine võtab kaua aega.
Kui ma oleks seda käsku juba aastaid tagasi teadnud, siis JUMAL !! kui lihtne mu elu oleks olnud 😀
Selge! Hästi käsitsetavad, nad on väga võimsad text Tekstiga manipuleerimiseks pole midagi paremat. Kuid mõnikord, nagu te sel juhul Perliga ütlete, ei pea te nii kaugele minema, kui asendajast piisab.
Ma oleksin nagunii Pythoni kasutanud :)
Aga janu näen seda veelgi lihtsamalt ... kas ma teen midagi valesti?
sed -i "jah / mida-ma tahan muuta / uus-panna-faili" "fail-millesse asendada
heh heh ... ja kui ma tahan asendada "http://my.blog.com/content/" sõnaga "http://my.blog.com/uploads/files/" 😀 ... siis juba olemas panna tühikute ja teistega ning see muutub keerukaks või mitte?
Eraldajana pole kohustuslik kasutada /. Vaadake + -ga
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» fail
O_O ... WTF!
Olete mulle nüüd terve universumi võimalusi avanud .. O_O
Mulle meeldivad need postitused, kus me kõik midagi õpime 🙂
Ma ei teadnud ka seda.
Eelistan kasutada otse vi ..
Nii lihtne kui:
:% s / us / minu pere / g
% -> kogu dokument
s -> otsi
g -> kõik esinemised
Tervitused ..
Aitäh!
Ma ei teadnud, kuidas seda vi-ga teha
Lisatud lemmikute hulka!
Aitäh!
Vaadake seda, kui teil on natuke käsku rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Suurepärane sissekanne! Juhul, kui keegi on huvitatud, sama ka Linux sed käsuga: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Ja mis juhtub, kui failis, mida ma tahan asendada, on jutumärgid?
Näide teksti asendava teksti asendamiseks: »1 ″ tekstiga:» 2 ″
kuidas käsk oleks?
Tere
Tahtsin asendada stringi, mille keskel oli @ ja mis muutis teksti ainult at-i ette.
muudetav tekst: elagu Peruu
uus tekst: Viva mi patria @percysalgado
Näidatud: Elagu mu kodumaa
Tänan abi eest
"\" Peate kasutama kaldkriipsu enne kahekordset kasutamist tähemärkide @, # abil, et neid tõlgendataks tekstina.
Ja kuidas ma seda aknades saan teha ????