Tam tikrais atvejais norime pakeisti failo tekstą, pavyzdžiui, pakeisti Document.txt viskas, ką „mano šeima“ sako už „mus“. Norėdami tai pasiekti, galime naudoti norimą teksto rengyklę (Kate, Gedit, SublimeText ir kt.), Tačiau visada gerai žinoti variantus, kitus būdus, kaip pasiekti tą patį rezultatą the
Būna, kad su reguliarūs posakiai tai galima pasiekti, sed komanda yra tiesiog nuostabi, ji turi begalę variantų ir variantų, bet ... tiems, kurie tiesiog nori pakeisti tekstą iš kuo sudėtingesnis būdas, jiems pateikiu šį daug paprastesnį variantą:
Pagal pavyzdį turime failą Document.txt įsikūrusi $ HOME / Document.txt su tokiu tekstu:
(...) mano šeima Tai panašu į visus juos, kaip ir tavo ar kaimyno. Iš tiesų mano šeima Mes stengiamės būti atsakingi žmonės ir visuomenės akimis, politiškai ir socialiai korektiški. Tačiau mano namuose yra juoda avis, ir tai yra mano vaidmuo. Aš visada buvau tas, kuris nebijo pasakyti, ką galvoja (net jei tai akivaizdžiai nėra teisinga visuomenės akimis), nors iš tikrųjų mano šeimai atsibodo
purvasnūdienos visuomenė.
Su šia komanda pakeisite «mano šeima„pagal“mums":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Tai taip paprasta 🙂
Taigi tekstas būtų:
(...) mums Tai panašu į visus juos, kaip ir tavo ar kaimyno. Iš tiesų mums Mes stengiamės būti atsakingi žmonės ir visuomenės akimis, politiškai ir socialiai korektiški. Tačiau mano namuose yra juoda avis, ir tai yra mano vaidmuo. Aš visada buvau tas, kuris nebijo pasakyti, ką galvoja (net jei tai akivaizdžiai nėra teisinga visuomenės akimis), nors iš tikrųjų mano šeimai atsibodo
purvasnūdienos visuomenė.
Sintaksė yra:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Komanda gali pasirodyti šiek tiek sudėtinga, šiek tiek suskaidykime ir paaiškinkime šiek tiek paprasčiau 😉
- perl : Ką naudosime, perl
- -pi : Pí, kaip π (apytikslė vertė 3.14)
- -e : E įsivaizduoja, kad „e įvykdytų“ ^ - ^
- Tada kabutėse » mes atidarome su s ir mes užsidarome su g: „sg“ ... Įsivaizduokite „S“, jei norite pradėti, ir „G“, jei žaidimas baigtas 😀
- Pasukite tarp sg turime įdėti du skliaustų rinkinius: [] y []būdamas tokiu būdu: „S [] [] g“
- Pirmųjų skliaustų viduje, kaip sakiau aukščiau, bus tekstas, kurį norime pašalinti ir pakeisti nauju, o antrajame skliaustų rinkinyje bus pateiktas naujas tekstas pagal pavyzdį: „S [mano šeima] [mes] g“
Paprasta, ar ne?
Paaiškinimas iš tikrųjų yra daug platesnis nei tai, ko reikia komandai, jį suprasti yra gana paprasta 🙂
Perl yra daug, daug daugiau nei būdas pakeisti tekstą, tai yra visa kalba language
Jei norite sužinoti daugiau apie tai, įdiekite paketą perl-doc ir pažvelk į tai, ką jis leidžia, tai tik kita visata.
Beje, jei norite uždaryti, darant prielaidą, kad norite rasti visus .txt failus, kuriuos turite „$ HOME“ / „Documents“, ir kiekviename iš jų pakeisti „mano šeimą“ į „mus“, galite prisijungti prie „find + perl“, kad tai pasiektumėte:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Arba naudojant pakaitos simbolį:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Šio antrojo varianto problema yra ta, kad jis nebus pakeistas failuose, esančiuose poaplankiuose
Šiaip ar taip, tikiuosi, kad jums tai pasirodė įdomu. Man tai buvo tikrai naudinga, aš jau galiu pakeisti tekstą tiesiai iš terminalo ... puiku! 😀
Na, manau, kad daugelis iš mūsų čia žino komandą „sed“, kuri atlieka tą patį tikslą, ji ją atlieka daug geriau ir yra lengviau naudojama ...
Ačiū už jūsų komentarą,
Tik dvi detalės, kodėl jūs sakote, kad sed daro jį geresnį? Ar tikrai lengviau naudoti su tiek daug „keistų“ personažų?
Sveiki visi!!!. Aš pasinaudojau komanda troškulys, o čia aprašytas metodas su perl yra paprastesnis. Aciu KZKG ^ Gaara !!!.
Ačiū už komentarą 🙂
Na, bent jau man atrodo, kad tai yra paprasčiau nei įprasti posakiai ... kad turint tiek daug „keistų“ personažų, neišmanantiems galima padaryti tai, ką tikrai sudėtinga suprasti ir išmokti.
Yra „senas“ posakis: „Aš turėjau problemą, nusprendžiau naudoti įprastus posakius ... dabar turiu DU problemų“ 😉
HAHAHAHAHAHAHA !!!
Reguliarūs posakiai tam tikru momentu gali išgelbėti mūsų gyvybes ... taip, reikia daug laiko išmokti jais naudotis ir nemirti bandant.
Jei būčiau žinojusi šią komandą prieš daugelį metų, DIEVAS !! koks paprastas būtų buvęs mano gyvenimas 😀
Aišku! Gerai tvarkomi, jie yra labai galingi. Nieko geresnio manipuliuoti tekstu. Tačiau kartais, kaip sakote šiuo atveju su Perlu, nereikia taip toli eiti, jei pakanka pakeitimo.
Šiaip būčiau naudojusi „Python“ :)
Bet ištroškęs matau tai dar paprasčiau ... ar aš ką nors darau ne taip?
sed -i "jei / ką-noriu pakeisti / naujas-įdėti /" failas-kurį-pakeisti
heh heh ... ir jei noriu pakeisti „http://my.blog.com/content/“ į „http://my.blog.com/uploads/files/“ 😀 ... jau turite įdėti \ su tarpais ir kitais, ir tai tampa sudėtinga, ar ne?
Naudoti / kaip separatorių nėra privaloma. Pažvelkite su +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» failas
O_O ... WTF!
Jūs dabar man atvėrėte visą variantų visatą .. O_O
Man patinka šie įrašai, kai visi kažko išmokstame 🙂
Aš taip pat nežinojau.
Aš norėčiau naudoti tiesiogiai vi ..
Paprasta kaip:
:% s / us / my family / g
% -> visas dokumentas
s -> paieška
g -> visi įvykiai
Sveikinimai ..
Ačiū!
Aš nežinojau, kaip tai padaryti su vi
Pridėta prie mėgstamiausių!
Ačiū!
Pažvelkite į tai, jei turite šiek tiek komandos rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Puikus įrašas! Jei kas nors domisi, tas pats su „Linux sed“ komanda: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
O kas nutiks, jei faile, kurį noriu pakeisti, yra kabučių?
Pavyzdys, kas sako tekstą: »1 ″ tekstu:» 2 ″
kaip būtų komanda?
Sveiki
Norėjau pakeisti eilutę, kurios viduryje būtų @, o tekstas būtų pakeistas tik į prieš ženklą at.
tekstas, kurį reikia pakeisti: Tegyvuoja Peru
naujas tekstas: Viva mi patria @percysalgado
Parodyta: Tegyvuoja mano gimtinė
Ačiū už jūsų pagalbą
"\" Turite naudoti pasvirąjį brūkšnį prieš simbolius, dvigubai vartojamus @, #, kad jie būtų interpretuojami kaip tekstas.
Ir kaip man tai padaryti languose ????