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:
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:
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.