Présentation
Sed signifie S flux ED itor. Il s'agit d'une commande Linux utilisée pour rechercher, trouver et remplacer, ou insérer et supprimer des mots et des lignes dans un fichier texte.
Le cas d'utilisation le plus courant de la commande Sed consiste à rechercher et à remplacer des chaînes dans des fichiers. Lorsque vous utilisez la commande Sed, vous pouvez modifier des fichiers sans les ouvrir.
Cet article explique en détail l'utilisation de la commande Sed pour rechercher et remplacer des chaînes dans des fichiers.
Tous les exemples de ce tutoriel ont été exécutés sur Ubuntu 20.04.
Rechercher et remplacer
Par défaut, Sed est installé dans la plupart des distributions Linux. Vous pouvez vérifier l'installation de Sed sur votre système Linux en exécutant :
$ sed --v
Le résultat ressemblera à ceci :
La syntaxe de base de l'utilisation de la commande Sed pour rechercher et remplacer du texte est :
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
Dans lequel :
-i :cette option permet à la commande Sed d'éditer les fichiers sur place au lieu d'écrire la sortie sur la sortie standard.
s :il signifie substitut.
/ / :Caractères délimiteurs.
g :Il s'agit d'un indicateur de remplacement global.
FICHIER :Le fichier que vous souhaitez manipuler par la commande Sed.
Il est fortement recommandé de mettre le modèle de recherche, le modèle de remplacement et les autres arguments entre guillemets.
Par exemple, voici un fichier texte utilisé pour la démonstration :
567 Test test test
test /bin/zsh linuxways.net testbar 789
Pour remplacer tous les mots "test" par des mots "linux", exécutez la commande suivante :
$ sed -i 's/test/linux/g' test.txt
Sortie :
Si vous n'utilisez pas l'indicateur g, seule la première occurrence du motif de recherche dans chaque ligne est remplacée :
$ sed -i 's/test/linux/' test.txt
Sortie :
Comme vous pouvez le voir, dans l'exemple précédent, le test de sous-chaîne à l'intérieur de la chaîne testbar est également placé. Si vous ne voulez pas remplacer une sous-chaîne dans le motif de recherche, plaçons le motif de recherche entre deux limites de mots \b :
$ sed -i 's/\btest\b/linux/g' test.txt
Sortie :
Pour rendre le modèle de recherche insensible à la casse, utilisons le drapeau I :
$ sed -i 's/test/linux/gI' test.txt
Sortie :
Dans le monde Linux, nous rencontrerons de nombreux cas d'utilisation qui ont les caractères de délimitation dans les fichiers texte. Nous devons utiliser la barre oblique inverse \ pour séparer les caractères délimiteurs. Par exemple, pour remplacer /bin/zsh par /usr/bin/bash, exécutez :
$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt
Sortie :
Recherche et remplacement récursifs
Dans de nombreux cas, vous souhaitez rechercher de manière récursive dans des répertoires des fichiers contenant une chaîne spécifique et remplacer cette chaîne dans tous les fichiers.
Par exemple, la commande suivante recherchera et remplacera la chaîne "way" par "road" dans tous les fichiers du répertoire actuel.
$ find . -type f -exec sed -i 's/way/road/g' {} +
Si les noms de fichiers contiennent des espaces, utilisons l'option -print0 :
$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'
Pour rechercher et remplacer une chaîne uniquement sur des fichiers ayant une extension spécifique, exécutez :
$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/way/road/g'
Conclusion
Vous avez parcouru quelques exemples courants d'utilisation de la commande Sed. Rechercher et remplacer une chaîne de texte dans un fichier avec la commande Sed n'est pas compliqué comme vous l'imaginez.
Si vous avez des inquiétudes, veuillez me le faire savoir dans la section des commentaires.