Le sed signifie éditeur de flux. Il lit le fichier donné, modifiant l'entrée comme spécifié par une liste de commandes sed.
Par défaut, l'entrée est écrite à l'écran, mais vous pouvez forcer la mise à jour du fichier.
La commande Linux Sed (Stream EDitor) est 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.
Chez LinuxAPT, dans le cadre de nos services de gestion de serveur, nous aidons régulièrement nos clients à effectuer des requêtes liées aux serveurs Linux.
Dans ce contexte, nous verrons comment utiliser la commande Sed pour rechercher et remplacer des chaînes dans des fichiers du système Ubuntu 20.04.
Rechercher et remplacer sur Ubuntu
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
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
Où :
-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 linuxapt.com 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
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
Pour rendre le modèle de recherche insensible à la casse, utilisons le drapeau I :
$ sed -i 's/test/linux/gI' test.txt
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
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 'apt' par 'road' dans tous les fichiers du répertoire courant.
$ find . -type f -exec sed -i 's/apt/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/apt/road/g'