En iuj okazoj ni volas anstataŭigi tekston en dosiero, ekzemple ŝanĝi en Document.txt ĉio, kion "mia familio" diras por "ni". Por atingi tion ni povas uzi nian preferatan tekstredaktilon (Kate, Gedit, SublimeText, ktp) sed ĉiam estas bone scii variantojn, aliajn manierojn atingi la saman rezulton.
Okazas, ke kun regulaj esprimoj vi povas atingi tion, la komando sed estas simple grandioza, ĝi havas senfinajn variantojn kaj eblojn sed ... por tiuj, kiuj nur volas anstataŭigi tekston de la malplej kompleksa maniero ebla, por ili, mi alportas ĉi tiun multe pli simplan varianton:
Sekvante la ekzemplon, ni havas la dosieron Document.txt lokita en $ HOME / Document.txt kun la sekva teksto:
(...) mia familio Ĝi similas al ĉiuj, kiel al via aŭ al via najbaro. Fakte mia familio Ni klopodas esti respondecaj homoj kaj antaŭ la okuloj de la socio, politike kaj socie ĝustaj. Tamen en mia domo estas nigra ŝafo, kaj tio estas mia rolo LOL!. Mi ĉiam estis tiu, kiu ne timas diri kion li pensas (kvankam ĝi ne ŝajne ĝustas en la okuloj de la socio), kvankam fakte mia familio estas laca de la
malpuraĵohodiaŭa socio.
Per la sekva komando vi ŝanĝos «mia familio"per"ni":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Ĝi estas tiel simpla 🙂
Do la teksto estus:
(...) ni Ĝi similas al ĉiuj, kiel al via aŭ al via najbaro. Fakte ni Ni klopodas esti respondecaj homoj kaj antaŭ la okuloj de la socio, politike kaj socie ĝustaj. Tamen en mia domo estas nigra ŝafo, kaj tio estas mia rolo LOL!. Mi ĉiam estis tiu, kiu ne timas diri kion li pensas (kvankam ĝi ne ŝajne ĝustas en la okuloj de la socio), kvankam fakte mia familio estas laca de la
malpuraĵohodiaŭa socio.
La sintakso estas:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
La komando eble ŝajnas iom kompleksa, ni iomete malkonstruu ĝin kaj klarigu ĝin iom pli simple 😉
- perl : Kion ni uzos, perl
- -pi : Pí, kiel π (la proksimuma valoro de 3.14)
- -e : La E imagu ĝin por «e ekzekuti» ^ - ^
- Tiam inter citiloj » ni malfermas per s kaj ni fermas per a g: "sg" … Imagu la S por Komenco kaj la G por Game Over 😀
- Turnu inter la sg ni devas meti du arojn da krampoj: [] y [], tiel: "S [] [] g"
- En la unuaj krampoj, kiel mi diris supre, la teksto, kiun ni volas forigi kaj anstataŭigi per nova, iros, dum en la dua aro da krampoj, la nova teksto metota iros, sekvante la ekzemplon: "S [mia familio] [ni] g"
Simpla ĉu ne?
La klarigo efektive estas multe pli vasta ol tio, kio necesas por la komando, estas sufiĉe simple kompreni 🙂
Perl estas multe, multe pli ol nur maniero anstataŭigi tekston, ĝi estas tuta lingvo 😉
Se vi volas lerni pli pri ĝi, instalu la pakaĵon perl-doc kaj rigardu al kiu ĝi permesas, ĝi estas nur alia universo.
Cetere kaj fermi, supozante ke vi volas trovi ĉiujn .txt-dosierojn, kiujn vi havas en $ HOME / Dokumentoj / kaj en ĉiu anstataŭigu "mian familion" per "ni", vi povas aliĝi al find + perl por atingi ĉi tion:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Aŭ uzante ĵokeron:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
La problemo kun ĉi tiu dua varianto estas, ke ĝi ne anstataŭiĝos en dosieroj en subdosierujoj 🙂
Ĉiuokaze, mi esperas, ke vi trovis ĝin interesa. Por mi ĝi estis vere utila, mi jam povas anstataŭigi tekston rekte de la terminalo ... bonege! 😀
21 komentoj, lasu la viajn
Nu, mi pensas, ke multaj el ni ĉi tie konas la komandon sed, kiu servas la saman celon, ĝi faras ĝin multe pli bone kaj pli facile uzeblas ...
Dankon pro via komento,
Nur du detaloj, kial vi diras, ke sed plibonigas ĝin? Ĉu vere pli facile uzi kun tiom da 'strangaj' roluloj?
Saluton al ĉiuj !!!. Mi uzis la komandon sed, kaj la metodo priskribita ĉi tie kun perl estas pli simpla. Dankon KZKG ^ Gaara !!!.
Dankon pro la komento 🙂
Nu, almenaŭ al mi ĉi tio ŝajnas pli simpla ol regulaj esprimoj ... ke kun tiom da "strangaj" signoj, io vere kompleksa por kompreni kaj lerni povas esti farita al la ne-spertaj.
Estas "malnova" diraĵo tie: "Mi havis problemon, mi decidis uzi Regulajn Esprimojn ... nun mi havas DU problemojn" 😉
HAHAHAHAHAHAHA !!!
Regulaj esprimoj povas savi niajn vivojn en certa momento ... jes, necesas longa tempo por lerni kiel uzi ilin kaj ne morti provante.
Se mi scius ĉi tiun komandon antaŭ jaroj, DIO !! kiel simpla mia vivo estus estinta 😀
Klara! Bone pritraktitaj ili estas tre potencaj 🙂 Nenio pli bona por manipuli tekston. Sed kelkfoje, kiel vi diras ĉi-kaze kun Perl, vi ne devas iri tiel malproksimen se anstataŭaĵo sufiĉas.
Mi uzus Python ĉiuokaze :)
Sed soifante mi vidas ĝin eĉ pli simple ... ĉu mi faras ion malĝustan?
sed -i "se / kion-mi-volas-ŝanĝi / nova-meti /" dosiero-en-anstataŭebla
he he he ... kaj se mi volas anstataŭigi "http://my.blog.com/content/" per "http://my.blog.com/uploads/files/" 😀 ... jam tie vi havas meti \ kun spacoj kaj aliaj, kaj ĝi fariĝas kompleksa aŭ ne?
Ne estas devige uzi / kiel apartigilon. Rigardu per +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» dosiero
O_O ... WTF!
Vi malfermis tutan universon de ebloj por mi nun .. O_O
Mi amas ĉi tiujn afiŝojn, kie ni ĉiuj lernas ion 🙂
Ankaŭ mi ne sciis tion.
Mi preferas uzi rekte vi ..
Tiel simpla kiel:
:% s / us / mia familio / g
% -> tuta dokumento
s -> serĉo
g -> ĉiuj okazoj
Saluton ..
Gracias!
Mi ne sciis kiel fari ĝin per vi
Aldonita al plej ŝatataj!
Gracias!
Rigardu, se vi havas iom de la rpl-komando
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Bonega eniro! Se iu interesas, same kun la komando Linukso sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Kaj kio okazas, se ene de la dosiero, kion mi volas anstataŭigi, havas citilojn?
Ekzemplo anstataŭigu tion, kio diras tekston: »1 ″ per teksto:» 2 ″
kiel estus la ordono?
Saluton
Mi volis anstataŭigi ĉenon, kiu havis @ en la mezo kaj nur ŝanĝis la tekston al la antaŭ la ĉe.
teksto por ŝanĝi: Viva el Perú
nova teksto: Viva mi patria @percysalgado
Montrita: Vivu mia patrujo
Dankon pro via helpo
"\" Vi devas uzi la oblikon antaŭ la signoj kun duobla uzo @, #, tiel ke ili estu interpretataj kiel teksto.
Kaj kiel mi faras ĝin en fenestroj ????