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é!