sed
- Rechercher et remplacer¶
sed
est une commande qui signifie « stream editor ».
Conventions¶
path
: le chemin actuel. Exemple :/var/www/html/
filename
: Le nom du fichier actuel. Exemple :index.php
Utilisation de sed
¶
Utiliser sed
pour la recherche et le remplacement est la préférence personnelle de l'auteur, car vous pouvez utiliser un délimiteur de votre choix, qui rend très pratique le remplacement de choses comme les liens web contenant « / ». Les exemples par défaut pour l'édition en place en utilisant sed
montrent des choses comme dans cet exemple :
sed -i 's/search_for/replace_with/g' /path/filename
Mais que faire si vous recherchez des chaînes qui contiennent "/" ? Et si la barre oblique était la seule option disponible comme délimiteur ? Vous devez éviter toute barre oblique avant de pouvoir l'utiliser dans votre recherche. C'est ici que sed
excelle par rapport aux autres outils, car le délimiteur est modifiable à la volée (vous n'avez pas besoin de préciser que vous le modifiez quelque part). Comme mentionné ci-dessus, si vous recherchez des éléments avec "/", vous pouvez le faire en remplaçant le délimiteur par "|". Voici un exemple de recherche de lien en utilisant cette méthode :
sed -i 's|search_for/with_slash|replace_string|g' /path/filename
Vous pouvez utiliser n'importe quel caractère d'un octet pour le délimiteur à l'exception des antislash, newline et "s". Par exemple, cela fonctionne aussi :
sed -i 'sasearch_forawith_slashareplace_stringag' /path/filename
où "a" est le délimiteur, la fonction recherche et remplacement fonctionne toujours. Pour des raisons de sécurité, vous pouvez spécifier une sauvegarde lors de la recherche et du remplacement, ce qui est pratique pour vous assurer que les changements que vous faites avec sed
sont ceux que vous voulez vraiment. Cela vous donne une option de récupération à partir du fichier de sauvegarde :
sed -i.bak s|search_for|replacea_with|g /path/filename
Ce qui va créer une version intacte du fichier filename
appelée filename.bak
Vous pouvez également utiliser des guillemets doubles au lieu de guillemets simples si vous le désirez :
sed -i "s|search_for/with_slash|replace_string|g" /path/filename
Explication des Options¶
Option | Description |
---|---|
i | éditer le fichier |
i.ext | créer une sauvegarde avec une extension quelconque (par exemple., .ext) |
s | spécifie la recherche |
g | spécifie le remplacement global, c'est-à-dire de toutes les occurrences |
Plusieurs fichiers¶
Malheureusement, sed
n'a pas d'option de boucle en ligne comme perl
. Pour traiter plusieurs fichiers ensemble, vous devez intégrer votre commande sed
dans un script. Voici un exemple de faire ainsi.
Tout d’abord, générez une liste de fichiers que le script va utiliser. Effectuez cette opération à partir de la ligne de commande avec :
find /var/www/html -name "*.php" > phpfiles.txt
Ensuite, créez un script pour utiliser ce fichier phpfiles.txt
:
#!/bin/bash
for file in `cat phpfiles.txt`
do
sed -i.bak 's|search_for/with_slash|replace_string|g' $file
done
Le script parcoure tous les fichiers créés dans phpfiles.txt
, crée une sauvegarde de chaque fichier et exécute la fonction rechercher et remplacer de la chaîne de caractères globalement. Une fois que vous avez vérifié que votre recherche et votre remplacement ont été effectués avec succès et que vos modifications sont vérifiées, vous pouvez supprimer tous les fichiers de sauvegarde.
Autres Articles et Exemples¶
sed
manual pagesed
exemples supplémentairessed
&awk
O'Reilly Book
Conclusion¶
sed
est un outil puissant qui fonctionne très bien pour les fonctions de recherche et de remplacement, en particulier lorsque le délimiteur doit être flexible.
Author: Steven Spencer