Pri určitých príležitostiach chceme nahradiť text v súbore, napríklad zmena v Document.txt všetko, čo „moja rodina“ hovorí za „nás“. Aby sme to dosiahli, môžeme použiť náš preferovaný textový editor (Kate, Gedit, SublimeText atď.), Ale vždy je dobré poznať varianty, iné spôsoby, ako dosiahnuť rovnaký výsledok 🙂
Stáva sa, že s regulárne výrazy to sa dá dosiahnuť, príkaz sed je jednoducho nádherný, má nekonečné varianty a možnosti, ale ... pre tých, ktorí chcú iba nahradiť text z najmenej zložitý možný spôsob, pre nich je to, že prinášam tento oveľa jednoduchší variant:
Podľa príkladu máme súbor Document.txt nachádza sa v $ HOME / Document.txt s nasledujúcim textom:
(...) moja rodina Je to ako všetky, ako vaše alebo susedove. v skutočnosti moja rodina Snažíme sa byť zodpovední a v očiach spoločnosti politicky a spoločensky korektní. V mojom dome je však čierna ovca, a to je moja rola LOL!. Vždy som bol ten, kto sa nebojí povedať, čo si myslí (aj keď to v očiach spoločnosti nie je zjavne správne), aj keď v skutočnosti má rodina dosť
špinadnešná spoločnosť.
Pomocou nasledujúceho príkazu zmeníte «moja rodina„používateľom“nám,:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Je to také jednoduché 🙂
Text by teda bol:
(...) nám Je to ako všetky, ako vaše alebo susedove. v skutočnosti nám Snažíme sa byť zodpovední a v očiach spoločnosti politicky a spoločensky korektní. V mojom dome je však čierna ovca, a to je moja rola LOL!. Vždy som bol ten, kto sa nebojí povedať, čo si myslí (aj keď to v očiach spoločnosti nie je zjavne správne), aj keď v skutočnosti má rodina dosť
špinadnešná spoločnosť.
Syntax je:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Príkaz sa môže zdať trochu zložitý, poďme si ho trochu rozobrať a vysvetliť trochu jednoduchšie 😉
- perl : Čo použijeme, perl
- -pi : Pí, ako π (približná hodnota 3.14)
- -e : E si to predstavuje pre «e na vykonanie» ^ - ^
- Potom v úvodzovkách » otvárame s a s a uzavrieme s g: „sg“ … Predstavte si S pre štart a G pre koniec hry 😀
- Otočte sa medzi sg musíme dať dve sady zátvoriek: [] y []takto: „S [] [] g“
- Do prvých zátvoriek, ako som povedal vyššie, sa dostane text, ktorý chceme odstrániť a nahradiť novým, zatiaľ čo do druhej sady zátvoriek pôjde nový text, nasledujúci príklad: „S [moja rodina] [my] g“
Jednoduché, že?
Vysvetlenie je v skutočnosti oveľa rozsiahlejšie, ako je potrebné pre príkaz, je celkom ľahké ho pochopiť 🙂
Perl je oveľa, oveľa viac ako spôsob nahradenia textu, je to celý jazyk 😉
Ak sa o ňom chcete dozvedieť viac, nainštalujte si balík perl-doc a pozri sa na to, kto to umožňuje, je to len iný vesmír.
Mimochodom a na záver, za predpokladu, že chcete nájsť všetky súbory .txt, ktoré máte v $ HOME / Documents /, a v každom z nich nahradiť „moja rodina“ za „nás“, môžete sa pripojiť k find + perl, aby ste to dosiahli:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Alebo pomocou zástupného znaku:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Problém tohto druhého variantu spočíva v tom, že sa nebude nahrádzať v súboroch, ktoré sú v podpriečinkoch
Každopádne dúfam, že vás to zaujalo. Pre mňa to bolo naozaj užitočné, už viem nahradiť text priamo z terminálu ... super! 😀
Myslím, že mnohí z nás tu poznajú príkaz sed, ktorý slúži na ten istý účel, robí to oveľa lepšie a ľahšie sa používa ...
Ďakujeme za váš komentár,
Iba dve podrobnosti, prečo hovoríte, že vďaka sedu je to lepšie? Je to skutočne jednoduchšie na použitie s toľkými „divnými“ postavami?
Pozdravujem všetkých!!!. Použil som príkaz smäd, a metóda tu opísaná s perlom je jednoduchšia. Vďaka KZKG ^ Gaara !!!.
Ďakujem za komentár 🙂
Prinajmenšom sa mi to zdá jednoduchšie ako regulárne výrazy ... že s toľkými „podivnými“ postavami možno pre tých, ktorí nie sú dôvtipní, urobiť niečo, čo je skutočne zložité pochopiť a naučiť sa.
Existuje „staré“ porekadlo: «Mal som problém, rozhodol som sa použiť regulárne výrazy ... teraz mám DVA problémy» 😉
HAHAHAHAHAHAHAHA !!!
Regulárne výrazy nám môžu v istej chvíli zachrániť život ... áno, trvá dlho, kým sa naučíme, ako ich používať, a nezomrieť pri pokuse.
Keby som poznal tento príkaz pred rokmi, BOH !! aký jednoduchý by bol môj život 😀
Jasný! S dobrou manipuláciou sú veľmi výkonní 🙂 Nič lepšie na manipuláciu s textom. Ale niekedy, ako hovoríte v tomto prípade pre Perl, nemusíte ísť až tak ďaleko, ak stačí výmena.
Aj tak by som použil Python :)
Ale v smäde to vidím ešte jednoduchšie ... robím niečo zle?
sed -i „ak / čo chcem zmeniť / nové vložiť /“ súbor v ktorom nahradiť
heh heh ... a ak chcem nahradiť „http://my.blog.com/content/“ výrazom „http://my.blog.com/uploads/files/“ 😀 ... už tam máte dať \ s medzerami a inými, a stane sa to zložitým alebo nie?
Použitie / ako oddeľovača nie je povinné. Pozerajte s +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» súbor
O_O ... WTF!
Teraz ste mi otvorili celý vesmír možností .. O_O
Milujem tieto príspevky, kde sa všetci niečo naučíme 🙂
To som tiež nevedel.
Radšej používam priamo vi ..
Rovnako jednoduché ako:
:% s / us / my family / g
% -> celý dokument
s -> hľadaj
g -> všetky výskyty
Zdravím ..
Vďaka!
Nevedel som, ako to urobiť s vi
Pridané k obľúbeným!
Vďaka!
Ak máte trochu príkazu rpl, pozrite sa na to
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Skvelý vstup! V prípade, že má niekto záujem, to isté platí aj pre príkaz Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
A čo sa stane, ak v súbore, ktorý chcem nahradiť, mám úvodzovky?
Príklad nahraďte text s textom: »1 ″ textom:» 2 ″
aký by bol príkaz?
Ahoj
Chcel som nahradiť reťazec, ktorý mal v strede znak @ a zmenil iba text na znak pred zavináčom.
text na zmenu: Nech žije Peru
nový text: Viva mi patria @percysalgado
Zobrazené: Nech žije moja vlasť
Vďaka za vašu pomoc
„\“ Pred znakmi s dvojitým použitím @, # musíte použiť lomku, aby sa interpretovali ako text.
A ako to urobím v oknách ????