Text vo vnútri súborov môžete nahradiť jediným príkazom: perl

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šnej spoloč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é! 


Pridať ako preferovaný zdroj v Google