Otázka :Jak nahradím všechny výskyty slova ve všech souborech v dané složce?
Zvažte problémový scénář, kdy máte web, na kterém často odkazujete na aktuální rok. Každý rok je potřeba rok aktualizovat. Můžete snadno najít všechny výskyty ve všech souborech, ale neměli byste se ručně měnit rok po jednom v každém souboru.
Řešení
Tak co děláš? Jedním z několika způsobů, jak najít všechny výskyty a poté nahradit hledaný výraz, je použití kombinace příkazů find a sed.
Můžete to snadno udělat jediným příkazem:V tomto příkladu máte ve složce pages 50 webových stránek. Tento příkaz okamžitě změní všechny výskyty „2017“ na „2018“:
find ~/public_html/my_website/pages -type f -exec sed -i 's/2017/2018/g' {} \;
Aby byl výše uvedený příklad trochu obecnější, musíte udělat toto:
find <path_to_directory> -type f -exec sed -i 's/<search_text>/<replace_text>/g' {} \;
Ve výše uvedeném příkazu nahraďte
Vysvětlení
To, co děláte, je, že používáte příkaz find k získání všech souborů v aktuálních adresářích a jejich podadresářích. Volba -type f zajišťuje, že získáte pouze soubory, nikoli adresáře.
A pak předáte výsledek pomocí příkazu exec příkazu sed. Příkaz sed vyhledá text a nahradí jej.
The {} \; je součástí příkazu exec. Mezera mezi } a \ je povinná.
Tento rychlý tip pro Linux navrhl Čtečka příruček pro Linux, Jane Hadley. Máte lepší řešení tohoto problému? Podělte se o to v komentářích.