Niekedy chceme nahradiť text v súbore, napríklad zmeniť všetko, čo v súbore Document.txt hovorí „moja rodina“ na „nás“ . Na to môžeme použiť náš preferovaný textový editor (Kate, Gedit, Sublime Text atď.), ale vždy je dobré poznať alternatívy, iné spôsoby, ako dosiahnuť rovnaký výsledok.
Ukazuje sa, že s regulárnymi výrazmi sa to dá dosiahnuť; príkaz `sed` je jednoducho skvelý, má nekonečné variácie a možnosti, ale... pre tých, ktorí chcú nahradiť text len čo najmenej zložitým spôsobom , prinášam tento oveľa jednoduchší variant:
Podľa príkladu máme súbor Document.txt umiestnený v $HOME/Document.txt s nasledujúcim textom:
Moja rodina je ako každá iná, ako tá tvoja alebo rodina tvojho suseda. V skutočnosti sa moja rodina snaží byť v očiach spoločnosti zodpovednými ľuďmi, politicky a spoločensky korektnými. Avšak, v mojom dome je čierna ovca a to je moja úloha, LOL! Vždy som bol ten, kto sa nebojí povedať, čo si myslím (aj keď to nie je spoločensky prijateľné), hoci v skutočnosti je moja rodina už znechutená dnešnou
chaotickou spoločnosťou.
Nasledujúci príkaz zmení „ moja rodina “ na „ my “:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Je to také jednoduché
Text by teda bol:
(...) sme ako všetci ostatní, ako vy alebo váš sused. V skutočnosti sa snažíme byť v očiach spoločnosti zodpovednými ľuďmi, politicky a spoločensky korektnými. Avšak, v mojom dome je čierna ovca a to je moja úloha, LOL! Vždy som bol ten, kto sa nebojí povedať, čo si myslím (aj keď sa to v očiach spoločnosti nezdá správne), hoci v skutočnosti je moja rodina už znechutená špinou
dnešnejspoločnosti.
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 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 začiatok 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 dlhšie, ako je potrebné pre príkaz, je celkom jednoduché pochopiť
Perl je oveľa, oveľa viac než len spôsob, ako nahradiť text, je to celý jazyk
Ak sa o tom chcete dozvedieť viac, nainštalujte si balík perl-doc a pozrite sa na všetko, čo umožňuje; je to jednoducho 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 s týmto druhým variantom je, že nenahradí súbory, ktoré sú v podpriečinkoch
Každopádne dúfam, že vás to zaujalo. Pre mňa to bolo naozaj užitočné, teraz môžem nahradiť text priamo z terminálu... skvelé!