Tutoriel Word 2013 - Remplacer automatiquement des mots dans un texte
Table des matières:
Très souvent, lorsque vous travaillez avec des fichiers texte, vous devrez rechercher et remplacer des chaînes de texte dans un ou plusieurs fichiers.
sed
est un éditeur de trames. Il peut effectuer une manipulation de texte de base sur des fichiers et des flux d'entrée tels que des pipelines. Avec
sed
vous pouvez rechercher, trouver et remplacer, insérer et supprimer des mots et des lignes. Il prend en charge les expressions régulières de base et étendues qui vous permettent de faire correspondre des modèles complexes.
, nous verrons comment trouver et remplacer des chaînes par
sed
. Nous vous montrerons également comment effectuer une recherche récursive et remplacer.
Rechercher et remplacer une chaîne par
sed
Il existe plusieurs versions de
sed
, avec quelques différences fonctionnelles entre elles. macOS utilise la version BSD et la plupart des distributions Linux sont livrées avec GNU
sed
pré-installé par défaut. Nous utiliserons la version GNU.
La forme générale de recherche et de remplacement de texte à l'aide de
sed
prend la forme suivante:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Par défaut,sed
écrit sa sortie sur la sortie standard. Cette option indique àsed
de modifier les fichiers sur place. Si une extension est fournie (ex -i.bak), une sauvegarde du fichier d'origine sera créée.s
- La commande de substitution, probablement la commande la plus utilisée dans sed./ / /
- Caractère délimiteur. Il peut s'agir de n'importe quel caractère mais généralement le caractère barre oblique (/
) est utilisé.SEARCH_REGEX
- Chaîne normale ou expression régulière à rechercher.REPLACEMENT
- La chaîne de remplacement.g
- Drapeau de remplacement global. Par défaut,sed
lit le fichier ligne par ligne et ne modifie que la première occurrence deSEARCH_REGEX
sur une ligne. Lorsque le drapeau de remplacement est fourni, toutes les occurrences seront remplacées.INPUTFILE
- Le nom du fichier sur lequel vous souhaitez exécuter la commande.
C'est une bonne pratique de mettre des guillemets autour de l'argument pour que les méta-caractères du shell ne se développent pas.
Voyons des exemples d'utilisation de la commande
sed
pour rechercher et remplacer du texte dans des fichiers par certaines de ses options et indicateurs les plus couramment utilisés.
À des fins de démonstration, nous utiliserons le fichier suivant:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Avec le drapeau de remplacement global
sed
remplace toutes les occurrences du modèle de recherche:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Comme vous l'avez peut-être remarqué, dans l'exemple précédent, la sous-chaîne
foo
à l'intérieur de la chaîne
foobar
est également remplacée. Si ce n'est pas le comportement souhaité, utilisez l'expression de délimitation de mot (
\b
) aux deux extrémités de la chaîne de recherche. Cela garantit que les mots partiels ne correspondent pas.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Pour rendre la correspondance de motifs insensible à la casse, utilisez l'indicateur
I
Dans l'exemple ci-dessous, nous utilisons les drapeaux
g
et
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
L'option la plus simple et beaucoup plus lisible consiste à utiliser un autre caractère de délimitation. La plupart des gens utilisent la barre verticale (
|
) ou les deux points (:) mais vous pouvez utiliser n'importe quel autre caractère:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Vous pouvez également utiliser des expressions régulières. Par exemple, pour rechercher les trois chiffres et les remplacer par le
number
chaîne que vous utiliseriez:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Une autre caractéristique utile de sed est que vous pouvez utiliser le caractère esperluette
&
qui correspond au motif correspondant. Le personnage peut être utilisé plusieurs fois.
Par exemple, si vous souhaitez ajouter des accolades
{}
autour de chaque nombre à 3 chiffres, tapez:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Enfin, c'est toujours une bonne idée de faire une sauvegarde lors de l'édition d'un fichier avec
sed
. Pour ce faire, fournissez simplement une extension à l'option
-i
. Par exemple, pour modifier le
file.txt
et enregistrer le fichier d'origine en tant que
file.txt.bak
vous utiliseriez:
sed -i.bak 's/foo/linux/g' file.txt
ls
Recherche et remplacement récursifs
Parfois, vous souhaitez rechercher récursivement dans les répertoires des fichiers contenant une chaîne et remplacer la chaîne dans tous les fichiers. Cela peut être fait en utilisant des commandes telles que
find
ou
grep
pour rechercher récursivement des fichiers dans le répertoire et en redirigeant les noms de fichiers vers
sed
.
La commande suivante recherchera récursivement des fichiers dans le répertoire de travail actuel et transmettra les noms de fichiers à
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Pour éviter les problèmes avec les fichiers contenant de l'espace dans leurs noms, utilisez l'option
-print0
qui indique à
find
d'imprimer le nom du fichier, suivi d'un caractère nul et de diriger la sortie vers
sed
aide de
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Pour exclure un répertoire, utilisez l'option
-not -path
. Par exemple, si vous remplacez une chaîne dans votre référentiel git local pour exclure tous les fichiers commençant par un point (
.
), Utilisez:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Une autre option consiste à utiliser la commande
grep
pour rechercher récursivement tous les fichiers contenant le modèle de recherche, puis diriger les noms de fichiers vers
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Conclusion
Bien que cela puisse sembler compliqué et complexe, au début, la recherche et le remplacement de texte dans des fichiers par
sed
est très simple.
Pour en savoir plus sur les commandes, les options et les indicateurs sed, visitez le manuel GNU sed et le tutoriel Grymoire sed. Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.
terminal sedRechercher des informations dans les fichiers texte Indexer des fichiers Recherche des mots Lite
Recherche des fichiers d'index Les mots Lite sont comme votre propre Google ... sont sur votre disque dur
Microsoft prend au sérieux les allégations selon lesquelles des partenaires commerciaux se livrent à des pots-de-vin pour obtenir des marchés publics dans trois pays en dehors des États-Unis, le Microsoft a pris mardi au sérieux les accusations selon lesquelles des partenaires commerciaux se seraient livrés à des pots-de-vin pour obtenir des marchés publics dans trois pays en dehors des Etats-Unis, a annoncé mardi le Wall Street Journal. la Securities and Exchange Commission des États-Unis enquê
[Lectures supplémentaires: Votre nouvel ordinateur a besoin de ces 15 programmes gratuits et excellents]
Comment vérifier si une chaîne contient une sous-chaîne dans bash
L'une des opérations les plus courantes lorsque vous travaillez avec des chaînes dans Bash est de déterminer si une chaîne contient ou non une autre chaîne. Dans cet article, nous allons vous montrer plusieurs façons de vérifier si une chaîne contient une sous-chaîne.