Najít & Nahradit text ve více dokumentech z příkazového řádku
Pokud vám vyhovuje příkazový řádek a někdy jste v situaci, kdy potřebujete najít a nahradit slovo, frázi, adresu URL nebo znak ve skupině více textových dokumentů, perl to zvládne docela dobře. Jednoduchý příkazový řetězec velmi rychle provede skupinové hromadné vyhledání a nahrazení textu, ať už v jednom dokumentu nebo ve skupině více dokumentů.
Jako mnoho věcí v příkazovém řádku neexistuje žádný potvrzovací proces, takže se před spuštěním příkazu budete chtít ujistit, že je vaše syntaxe nastavena správně, jinak možná budete muset provést další hledání a nahrazení opravit překlep.
Základní syntaxe příkazu je následující: perl -pi -w -e 's/THIS/THAT/g;' /cesta/k/souborům.txt
Jako příklad s jedním slovem, pokud potřebujete nahradit všechny výskyty slova „ogre“ výrazem „cornbread“ v každém souboru .txt ve složce „Dokumenty“, pak byste použili následující příkaz:
perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/.txt
Pro příklad nalezení a nahrazení celé fráze předpokládejme, že nahradíme celou větu „Továrna na čokoládu “ s „The Wizard of Oz“ ve skupině souborů .txt začínajících na „Films“ uložených v adresáři Documents:
perl -pi -w -e 's/Továrna na čokoládu/Čaroděj ze země Oz/g;' ~/Documents/Films.txt
Vyhledání a nahrazení se provede okamžitě. Změnu můžete zkontrolovat pomocí cat a grep a zkontrolovat:
cat ~/Documents/Films124.txt |grep Čaroděj ze země Oz"
Je pravda, že je to poměrně pokročilé, a ano, dávkové vyhledávání a nahrazování prostřednictvím více dokumentů lze provádět uživatelsky přívětivějším způsobem prostřednictvím aplikací GUI, jako je TextWrangler a BBEdit, ale někdy je příkazový řádek rychlejší pro rychlé úkoly, jako je tento a další, které jsou podobné, navíc nevyžaduje žádné další stahování.
Velký palec nahoru Lifehackerovi za skvělý trik.
Update: Příkaz „sed“ je další způsob, jak rychle najít a nahradit pomocí příkazového řádku. Pokrytí sed je většinou téma pro jiný článek, ale základní syntaxe použití sed pro tento úkol je o něco jednodušší, a proto je snáze zapamatovatelná:
sed -i 's/THIS/THAT/g' /cesta/k/souborům.txt
Neexistuje žádný správný nebo špatný způsob, takže to, zda použijete perl nebo sed, je věcí osobních preferencí.