SED Regex Remplacer

SED Regex Remplacer

Dans Unix / Linux, SED est une commande dédiée pour l'édition de flux. C'est là que vient le nom de la commande (éditeur de flux). Il prend un flux en entrée, filtre et transforme son contenu, et publie le résultat comme indiqué.

Dans ce guide, nous allons jeter un œil à l'utilisation de SED avec les expressions régulières (regex pour faire court) pour remplacer le contenu dans un fichier texte. Ce guide utilisera la version GNU / Linux de SED.

Saisir un exemple de fichier texte

À des fins de démonstration, nous créons un fichier texte simple avec du texte pour pratiquer nos commandes SED. Créez un fichier texte à l'aide de Nano:

$ nano sed-practice.SMS

À l'intérieur du fichier, entrez le texte suivant:

#!/ bac / bash
Écho "The Quick Brown Fox"
Echo "saute par-dessus le chien paresseux"

Remplacement des textes à l'aide de SED

La structure de commande principale de SED pour remplacer les textes est la suivante:

$ sed -i 's /// g'

Ici:

  • -I: Le comportement par défaut de SED est d'écrire la sortie sur le stdout (sortie standard). Cependant, ce drapeau dit à SED de modifier le ou les fichiers en place à la place. Si une extension est également fournie (par exemple, -I.bak), une sauvegarde du fichier d'origine est créée.
  • S: Instruit SED pour effectuer une opération de substitut sur le flux donné.
  • /: Le caractère délimiteur.
  • : Une expression régulière pour SED à correspondre sur le flux donné.
  • : La chaîne de remplacement.
  • G: Flag instruisant SED à effectuer un remplacement global. Par défaut, SED correspond uniquement et remplace la première instance.

Essayons-le. Dans l'exemple suivant, nous remplaçons le avec LE dans la pratique sed.SMS:

$ sed -i's / le / g 'sed-practice.SMS

Vérifiez les modifications.

$ Cat Sed-Practice.SMS

Comme vous pouvez le voir, nous avons réussi à modifier le contenu du fichier.

Travailler avec des personnages de délimiteur

Comme décrit dans la section précédente, les instructions SED sont livrées avec des caractères de délimiteur pour séparer les différentes parties. Si nous voulons remplacer les textes qui contiennent le caractère délimiteur, nous devons utiliser la barre arrière (\) pour lui échapper.

Jetons un coup d'œil à l'exemple suivant:

$ sed -i 's / \ / bin \ / bash / \ / usr \ / bin \ / zsh / g' sed-practice sed.SMS

Ici, nous remplaçons le / bin / bash par / usr / bin / zsh. Vérifiez si la tentative est réussie.

$ Cat Sed-Practice.SMS

En utilisant ce motif en zigzag de l'avant et des barreaux récessifs, il peut facilement devenir extrêmement déroutant. C'est pourquoi c'est une pratique courante d'utiliser d'autres délimiteurs tels que le côlon (:) ou la barre verticale (|). Réécrivons la commande en utilisant la barre verticale comme délimiteur:

$ sed -i's | / usr / bin / zsh | / bin / bash | g 'sed-practice.SMS

Ensembles de caractères regex

Nous pouvons utiliser les jeux de caractères pour décrire un ensemble de caractères à remplacer dans SED. Voici quelques jeux de caractères communs que vous rencontrerez:

  • [A-Z]: tous les alphabets minuscules.
  • [A-Z]: tous les alphabets en majuscules.
  • [0-9]: tous les chiffres.

Dans l'exemple suivant, nous remplaçons tous les chiffres par l'alphabet. Jetez un œil à l'exemple suivant:

$ echo 1001001 | sed -e 's | [0-9] | k | g'

Ici, SED remplace tous les chiffres (1 et 0, dans ce cas) il trouve par la lettre k.

Et si nous voulons remplacer 1 par a et 0 par b? Voici une façon d'y parvenir:

$ echo 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'

Ici, la première commande SED remplace 1 par un. La sortie est ensuite tuée vers une deuxième commande SED qui remplace 0 par b.

Conclusion

Dans ce guide, nous avons brièvement démontré les différentes façons d'utiliser SED pour trouver et remplacer les textes. À l'aide de Regex, nous avons pu affiner la recherche et remplacer le contenu exact. En savoir plus sur Sed Regex.

Avec l'aide de certains outils supplémentaires comme FIND, nous pouvons utiliser SED pour même modifier les fichiers d'un répertoire entier.

Nous pouvons également implémenter SED dans les scripts bash pour effectuer une modification de flux plus complexe. En savoir plus sur le début du voyage avec les scripts bash.