Nahraďte text uvnitř souborů jediným příkazem: perl

Někdy chceme nahradit text v souboru, například změnit vše, co v souboru Document.txt říká „moje rodina“, na „nás“ . K tomu můžeme použít náš preferovaný textový editor (Kate, Gedit, Sublime Text atd.), ale vždy je dobré znát alternativy, jiné způsoby, jak dosáhnout stejného výsledku.

Ukazuje se, že s regulárními výrazy toho lze dosáhnout; příkaz `sed` je prostě skvělý, má nekonečné variace a možnosti, ale… pro ty, kteří chtějí nahradit text pouze co nejméně složitým způsobem , přináším tuto mnohem jednodušší variantu:

Podle příkladu máme soubor Document.txt umístěný v $HOME/Document.txt s následujícím textem:

Moje rodina je jako každá jiná, jako ta vaše nebo rodina vašeho souseda. Vlastně se moje rodina snaží být v očích společnosti zodpovědnými lidmi, politicky a sociálně korektními. Nicméně v mém domě je černá ovce a to je moje role, LOL! Vždycky jsem byl ten, kdo se nebojí říct, co si myslím (i když to není společensky přijatelné), i když ve skutečnosti má moje rodina dost dnešní zpackané společnosti.

Následující příkaz změní „ moje rodina “ na „ my “:

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

Je to tak jednoduché 

Text by tedy byl:

(…) jsme jako všichni ostatní, jako vy nebo váš soused. Vlastně se snažíme být v očích společnosti zodpovědní, politicky a sociálně korektní. Nicméně v mém domě je černá ovce a to je moje role, LOL! Vždycky jsem byl ten, kdo se nebojí říct, co si myslím (i když to v očích společnosti zdánlivě správné není), i když ve skutečnosti je moje rodina otrávená špínou dnešní společnosti.

Syntaxe je:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Příkaz se může zdát trochu složitý, pojďme si ho trochu rozebrat a vysvětlit trochu jednodušeji 

  • perl : Co použijeme, perl
  • -pí : Pí, jak π (přibližná hodnota 3.14)
  • -e : E si to představte pro «e k provedení» ^ - ^
  • Pak v uvozovkách » otevíráme s s a zavřeme s g: "sg" …představte si S pro začátek a G pro konec hry 
  • Otočte se mezi sg musíme dát dvě sady závorek: [] y []tímto způsobem: „S [] [] g“
  • Uvnitř prvních závorek, jak jsem řekl výše, půjde text, který chceme odstranit a nahradit novým, zatímco v druhé sadě závorek půjde nový text, který umístíme, podle příkladu: „S [moje rodina] [my] g“

Jednoduché, že?

Vysvětlení je ve skutečnosti mnohem delší, než je nutné pro příkaz, je celkem jednoduché pochopit 

Perl je mnohem, mnohem víc než jen způsob, jak nahradit text, je to celý jazyk 

Pokud se o tom chcete dozvědět více, nainstalujte si balíček perl-doc a podívejte se na vše, co umožňuje; je to prostě jiný vesmír.

Mimochodem a na závěr, za předpokladu, že chcete najít všechny soubory .txt, které máte v $ HOME / Documents /, a v každém z nich nahradit „my family“ za „us“, můžete se připojit find + perl, abyste toho dosáhli:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

Nebo pomocí zástupného znaku:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Problém s touto druhou variantou je, že nenahradí soubory, které jsou v podsložkách 

Každopádně doufám, že vás to zaujalo. Pro mě to bylo opravdu užitečné, nyní mohu nahradit text přímo z terminálu... skvělé! 


Přidat jako preferovaný zdroj v Googlu