Otázka: Chtěl bych nahradit text odkazem v kotevní značce souboru html. Problém je v tom, že projekt obsahuje stovky takových HTML souborů a ruční nahrazení textu ve všech těchto souborech není chytrý způsob, jak to udělat. Otázka tedy zní, jak mohu udělat totéž pomocí jediného příkazu v Linuxu?
Řešení:
Pomocí sed příkaz v Linuxu:
sed -i 's/#\(.*logo\)/domain.ca\1/' $file
Výše uvedený příkaz hledá řádek, který obsahuje vzor logo a nahradí „#“ odkazem (např. doména.ca)
Můžete také předat více souborů pro výše uvedený příkaz, jak je znázorněno níže.
Další variantou výše uvedeného příkazu je:
sed -i '/logo.png/ s/#/domain.ca/' *.html
Pomocí perlu příkaz:
perl -i -pe 's/#/domain.ca/ if /logo.png/' about-us.html
Příkaz je velmi přímočarý – prohledejte text a nahraďte jej určitým řetězcem tehdy a pouze tehdy, když najde odpovídající řetězec na daném řádku souboru.
Všechny výše uvedené příkazy dělají stejnou práci, ale liší se pouze tím, jak zadáte svůj regulární výraz.
Používejte Vim v ex režim (nelze použít s více soubory):
ex -sc '/logo/s/#/http:\/\/domain.ca\//|x' about-us.html
Ve výše uvedeném příkazu regulární výraz ‘/logo/s/#/http:\/\/domain.ca\//|x ‚sestává z ‚s‘ a ‚x‘ – kde ‚s‘ zastupuje a ‚x‘ je pro uložení a zavření souboru.
Poznámka:Výše uvedený příkaz používá vim , nemůžete předat více souborů. Tento příkaz musíte provést ručně pro každý soubor, který má být nahrazen.