Présentation
Le sed (s streamer ed itor) est un outil d'analyse et de transformation de texte orienté ligne. Le sed
La commande utilise un langage de programmation simple et des expressions régulières pour traiter les flux de texte et les fichiers. La fonctionnalité la plus utilisée du sed
la commande est une substitution de chaîne.
Ce guide montre comment utiliser sed
pour rechercher et remplacer des chaînes à l'aide d'exemples.
Prérequis
- Accès à la ligne de commande/au terminal.
- Un fichier texte (ce guide fournit un example.txt fichier).
- Commandes de terminal de base (prenez notre aide-mémoire gratuit).
sed rechercher et remplacer la syntaxe
La syntaxe pour rechercher et remplacer du texte en utilisant le sed
la commande est :
sed -i 's/<search regex>/<replacement>/g' <input file>
La commande se compose des éléments suivants :
-i
indique lesed
commande pour écrire les résultats dans un fichier au lieu de la sortie standard.s
indique la commande de remplacement./
est le caractère délimiteur le plus courant. La commande accepte également d'autres caractères comme délimiteurs, ce qui est utile lorsque la chaîne contient des barres obliques.<search regex>
est le paramètre de recherche de chaîne ou d'expression régulière.<replacement>
est le texte de remplacement.g
est l'indicateur de remplacement global, qui remplace toutes les occurrences d'une chaîne au lieu de la première uniquement.<input file>
est le fichier dans lequel la recherche et le remplacement ont lieu.
Les guillemets simples permettent d'éviter l'expansion des méta-caractères dans le shell.
La version BDS de sed
(qui inclut macOS) ne prend pas en charge la correspondance insensible à la casse ou le remplacement de fichiers. La commande de remplacement de fichier ressemble à ceci :
sed 's/<search regex>/<replacement>/g' <input file> > <output file>
Vous pouvez également installer la version GNU de sed
sur macOS avec homebrew :
brew install gnu-sed
Exécutez le GNU sed
commande comme suit :
gsed -i 's/<search regex>/<replacement>/g' <input file>
Remplacez le sed
commande avec gsed
suivre les exemples ci-dessous.
Exemples de remplacement sed
Les exemples de ce guide utilisent un exemple de fichier pour remplacer les chaînes.
1. Créez un exemple de fichier texte :
nano example.txt
2. Ajoutez le contenu suivant :
foobarbazfoobarbaz
foo bar baz foo bar baz
Foo Bar Baz Foo Bar Baz
FOO BAR BAZ FOO BAR BAZ
/foo/bar/baz /foo/bar/baz
Utilisez le fichier comme entrée pour tester les exemples ci-dessous.
Remarque :Pour un sed
complet tutoriel de commande pour Linux, consultez notre guide Linux de commande sed.
Remplacer la première chaîne correspondante
1. Pour remplacer la première instance trouvée du mot bar avec linux dans chaque ligne d'un fichier, exécutez :
sed -i 's/bar/linux/' example.txt
2. Le -i
la balise insère les modifications dans example.txt dossier. Vérifiez le contenu du fichier avec la commande cat :
cat example.txt
La commande remplace la première instance de bar avec linux dans chaque ligne, y compris les sous-chaînes. La correspondance est exacte, ignorant les variations de capitalisation.
Remplacement global
Pour remplacer chaque correspondance de chaîne dans un fichier, ajoutez le g
indicateur au script. Par exemple :
sed -i 's/bar/linux/g' example.txt
La commande remplace globalement chaque instance de bar avec linux dans le fichier.
Mettre en correspondance et remplacer tous les cas
Pour rechercher et remplacer toutes les occurrences d'un mot et ignorer les majuscules, utilisez le I
paramètre :
sed -i 's/bar/linux/gI' example.txt
La commande remplace toutes les occurrences du mot bar dans le texte, sans tenir compte des majuscules.
Ignorer les sous-chaînes
Ajouter des limites de mots (\b
) au sed
commande pour ignorer les sous-chaînes lors du remplacement de chaînes dans un fichier. Par exemple :
sed -i 's/\bbar\b/linux/gI' example.txt
Vous pouvez également modifier le délimiteur pour rendre la commande plus lisible :
sed -i 's:\bbar\b:linux:gI' example.txt
La commande ignore les sous-chaînes, ne correspondant qu'au mot entier.
Rechercher et remplacer des chaînes par des barres obliques
Échapper au caractère barre oblique pour rechercher et remplacer une chaîne par des barres obliques. Par exemple, pour remplacer /foo/bar/baz avec /home/kb , utilisez la syntaxe suivante :
sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt
Vous pouvez également modifier le délimiteur pour éviter les caractères d'échappement :
sed -i 's:/foo/bar/baz:/home/kb:g' example.txt
Utilisez cette syntaxe pour remplacer les chemins et autres chaînes par des barres obliques.
Rechercher et remplacer par des expressions régulières
Le modèle de recherche pour le sed
La commande accepte les expressions régulières, similaires à grep regex. Par exemple, pour faire correspondre toutes les lettres majuscules et les remplacer par 5 , utilisez :
sed -i 's/[A-Z]/5/g' example.txt
Le modèle regex aide à trouver toutes les lettres majuscules et les remplace par le nombre dans le fichier.
Chaîne de référence trouvée
Utilisez le caractère esperluette (&
) pour référencer la chaîne trouvée. Par exemple, pour ajouter une barre oblique (/ ) avant chaque instance de foo dans un fichier, utilisez :
sed -i 's/foo/\/&/gI'example.txt
Au lieu de retaper le paramètre de recherche, le &
signe fait référence à la chaîne trouvée.
Créer une sauvegarde
Pour créer un fichier de sauvegarde avant d'écraser celui existant, ajoutez le .bak
paramètre au -i
balise.
sed -i.bak 's/foo/FOO/g' example.txt
La commande crée une sauvegarde (example.txt.bak
) avant d'écraser l'original. Utilisez cette méthode pour conserver une copie dans le format d'origine et éviter l'écrasement.
Recherche et remplacement récursifs
Utilisez la commande find pour rechercher des fichiers et combinez-la avec sed
pour remplacer les chaînes dans les fichiers de manière récursive. Par exemple :
find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +
La commande trouve tous les fichiers commençant par exemple et exécute le sed
commande sur les fichiers. La commande exécutée remplace toutes les lettres par 5 , en ignorant les majuscules.
Conclusion
Après avoir parcouru les exemples de ce guide, vous savez comment utiliser sed
pour remplacer les chaînes dans les fichiers. Le sed
command est un puissant utilitaire de manipulation de texte doté de nombreuses fonctionnalités avancées.
Ensuite, consultez la commande awk ou gawk pour en savoir plus sur les autres outils de manipulation de texte.