Question : Je voudrais remplacer un texte par un lien dans la balise d'ancrage d'un fichier html. Le défi est que le projet contient des centaines de ces fichiers HTML et le remplacement manuel d'un texte dans tous ces fichiers n'est pas une manière intelligente de le faire. Donc la question est, comment puis-je faire la même chose en utilisant une seule commande sous Linux ?
Solution :
Utiliser sed commande sous Linux :
sed -i 's/#\(.*logo\)/domain.ca\1/' $file
La commande ci-dessus recherche la ligne qui contient le motif logo et remplace "#" par un lien (par exemple, un domaine.ca)
Vous pouvez également transmettre plusieurs fichiers pour la commande ci-dessus, comme indiqué ci-dessous.
Une autre variante de la commande ci-dessus est :
sed -i '/logo.png/ s/#/domain.ca/' *.html
Utiliser perl commande :
perl -i -pe 's/#/domain.ca/ if /logo.png/' about-us.html
La commande est très simple - recherchez le texte et remplacez-le par une certaine chaîne si et seulement si elle trouve une chaîne correspondante sur cette ligne du fichier.
Toutes les commandes ci-dessus font le même travail, mais elles ne diffèrent que par la façon dont vous mettez votre expression régulière.
Utiliser Vim dans ex mode (ne peut pas être utilisé avec plusieurs fichiers) :
ex -sc '/logo/s/#/http:\/\/domain.ca\//|x' about-us.html
Dans la commande ci-dessus, l'expression régulière '/logo/s/#/http:\/\/domain.ca\//|x ' se compose de 's' et 'x' - où 's' est pour le remplacement et 'x' est pour enregistrer et fermer le fichier.
Remarque :La commande ci-dessus utilise vim , vous ne pouvez pas transmettre plusieurs fichiers. Vous devez exécuter cette commande manuellement pour chaque fichier à remplacer.