GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier

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 le sed 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.


Linux
  1. Utilisez la commande SED pour rechercher et remplacer la chaîne dans les fichiers - Comment effectuer cette tâche sur Ubuntu ?

  2. Comment remplacer une chaîne dans un ou plusieurs fichiers ?

  3. Comment utiliser Sed pour remplacer une chaîne multiligne ?

  4. Rechercher et remplacer dans les scripts shell

  5. Comment utiliser sed pour remplacer la variable d'un fichier de configuration ?

Fichier hôte Linux :comment le modifier et l'utiliser ?

Comment trouver une chaîne dans un fichier sous Linux

Comment utiliser la commande SED pour rechercher et remplacer une chaîne dans des fichiers

Comment rechercher et remplacer du texte, un mot ou une chaîne dans un fichier

Comment créer et utiliser un fichier d'échange sous Linux

Comment rechercher et remplacer du texte dans Vim