Présentation
SED est un éditeur de flux de texte utilisé sur les systèmes Unix pour éditer des fichiers rapidement et efficacement. L'outil recherche, remplace, ajoute et supprime des lignes dans un fichier texte sans ouvrir le fichier dans un éditeur de texte.
Apprenez à utiliser le sed
commande et ses options grâce à des exemples faciles à suivre.
Syntaxe Linux sed
La syntaxe principale pour utiliser Linux sed
la commande est :
sed OPTIONS... [SCRIPT] [INPUTFILE...]
Options Linux sed
Vous pouvez exécuter sed
avec les options de ligne de commande suivantes :
-b , --binary | Ouvrez les fichiers d'entrée en mode binaire pour considérer que les lignes se terminent par un saut de ligne. |
--debug | Passer en mode débogage pour imprimer l'entrée sous forme canonique et annoter l'exécution du programme. |
--follow-symlinks | Modifier la destination finale si le fichier spécifié est un lien symbolique. Cela ne fonctionne que lorsqu'il est combiné avec le -i option. |
--help | Afficher les informations d'utilisation. |
--i , --in-place [=SUFFIX] | Effectuez des modifications sur place en écrasant le fichier d'origine. |
--posix | Désactiver toutes les extensions vers POSIX sed pour simplifier l'écriture de scripts portables. |
--version | Afficher la version de sed en cours d'exécution sur le système. |
-E , -r , --regexp-extended | Utilisez des expressions régulières étendues. |
-e <em>script</em> , --expression=<em>script</em> | Ajouter un script spécifié à exécuter avec les commandes. |
-f <em>script-file</em> | Ajouter le contenu d'un fichier de script spécifié à exécuter avec les commandes. |
-l <em>N</em> , --line-length=<em>N</em> | Définissez la longueur de retour à la ligne souhaitée pour le l commande (la valeur par défaut est 70). |
-n , --quiet , --quiet | Désactiver l'impression de sortie. |
-s , --separate | Afficher les fichiers spécifiés séparément, et non comme un seul long flux continu. |
--sandbox | Désactivez les programmes externes en cours d'exécution et utilisez uniquement les fichiers d'entrée sur la ligne de commande. |
-u , --unbuffered | Minimiser les tampons d'entrée et de sortie. |
-z , --null-data , --zero-terminated | Afficher l'entrée sous la forme d'un ensemble de lignes où chacune se termine par un octet zéro. |
Exemples Linux sed
Ci-dessous, nous montrons dix sed
couramment utilisés commandes, exemples et syntaxe.
Pour ce tutoriel, nous avons créé un exemple de fichier sous le nom foxinbox.tx t avec le contenu suivant :
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Notez que sed
n'affecte pas le fichier source sauf instruction contraire. Au lieu de cela, la commande affiche les modifications apportées par la commande donnée dans sa sortie.
Pour écraser le fichier d'origine, utilisez le -i
possibilité d'enregistrer les modifications. Cependant, une telle pratique n'est pas recommandée avant de tester la sortie de la commande.
Vous pouvez également enregistrer les modifications dans un fichier différent (ou nouveau). Redirigez la sortie en ajoutant > newfilename.txt
à la fin de la commande.
Remplacer la chaîne à l'aide de la commande sed
Le sed
de Linux La commande est la plus couramment utilisée pour remplacer du texte. Il recherche le modèle spécifié dans un fichier et le remplace par la chaîne souhaitée.
Pour remplacer du texte à l'aide de sed
, utilisez la commande de remplacement s
et des délimiteurs (dans la plupart des cas, des barres obliques - /
) pour séparer les champs de texte.
Par conséquent, la syntaxe pour remplacer le texte est :
sed 's/old_string/new_string/' filename.txt
Remplacer old_string
avec le texte que vous souhaitez remplacer et new_string
avec le texte que vous souhaitez modifier.
Par exemple, pour remplacer les instances de box
avec le mot bin
, exécutez :
sed 's/box/bin/' foxinbox.txt
La sortie affiche le texte avec les mots remplacés, comme dans l'image ci-dessous.
Remplacer toutes les occurrences de chaîne à l'aide de la commande sed
Par défaut, sed
remplace uniquement la première occurrence de la chaîne spécifiée dans chaque ligne. Il recherche la première instance du mot spécifié dans une ligne, le remplace et passe à la ligne suivante.
Avec plusieurs occurrences du mot box
dans la même ligne, la commande ne remplace que la première.
Si vous avez plusieurs occurrences du même mot sur une seule ligne, ajoutez le g
flag à la commande pour tous les changer.
La commande pour substituer chaque occurrence d'une chaîne donnée dans un texte est :
sed 's/old_string/new_string/g' filename.txt
Pour remplacer le mot box
avec le mot bin
dans le fichier foxinbox.txt à chaque fois, tapez :
sed 's/box/bin/g' foxinbox.txt
La sortie ci-dessus montre que la commande a remplacé toutes les instances du mot box
.
Remplacer une occurrence spécifique dans une ligne à l'aide de la commande sed
Le sed
La commande vous permet de choisir l'occurrence d'une chaîne spécifiée que vous souhaitez remplacer dans chaque ligne. Pour ce faire, ajoutez un indicateur numérique tel que 1
, 2
, etc. :
sed 's/old_string/new_string/#' filename.txt
Par exemple, pour substituer la seconde occurrence du mot box
dans chaque ligne du texte avec le mot bin
, utilisez cette commande :
sed 's/box/bin/2' foxinbox.txt
La commande a ignoré trois occurrences du mot car elles étaient en première ligne et n'a remplacé que celle à la fin.
Imprimer uniquement les lignes avec du texte de remplacement
Par défaut, le sed
La commande imprime l'intégralité du contenu du fichier, ainsi que le texte de remplacement dans sa sortie. Si vous avez beaucoup de texte et que vous souhaitez vous concentrer sur les lignes avec les modifications appliquées, ajoutez les attributs nécessaires à la commande.
Pour imprimer uniquement les lignes qui ont une substitution dans les conditions données, utilisez la syntaxe :
sed -n 's/old_string/new_string/p' filename.txt
Le -n
option désactive l'impression automatique, tandis que la commande de substitution p
ordonne à sed
pour imprimer les lignes où la substitution se produit.
Vous pouvez ajouter le p
commande à d'autres commandes de substitution, comme dans l'exemple ci-dessous :
sed -n 's/box/bin/2p' foxinbox.txt
La commande remplace la deuxième instance du mot box
dans une ligne et imprime la ligne où le changement a eu lieu. Dans l'image ci-dessous, vous ne voyez qu'une seule ligne avec la substitution appliquée.
Remplacer la chaîne à l'aide de la commande sed et ignorer la casse
Par défaut, le sed
La commande est sensible à la casse. Par exemple, le contenu suivant contient le mot fox
avec les premières lettres majuscules et minuscules :
Knox in box.
Fox in socks.
Knox on fox in socks in box.
Socks on Knox and Knox in box.
Fox in socks on box on Knox.
Pour substituer toutes les instances du mot renard , n'exécutez pas la commande habituelle :
sed 's/fox/cow/' foxinbox.txt
Le résultat de la commande ne change que l'occurrence du mot fox
où il est entièrement en minuscule :
Pour ignorer la casse lors de la substitution de texte, ajoutez le i
sous-commande à la fin de la commande :
sed 's/old_string/new_string/i' filename.txt
Par conséquent, la commande pour changer les instances majuscules et minuscules du mot renard dans le texte ci-dessus est :
sed 's/fox/cow/i' foxinbox.txt
La sortie montre que la commande a modifié les trois instances de la chaîne spécifiée.
Remplacer la chaîne dans une ligne spécifique à l'aide de la commande sed
Le sed
La commande vous permet de substituer une chaîne dans une ligne spécifique en ajoutant le numéro de ligne comme préfixe aux s
sous-commande :
sed '# s/old_string/new_string/' filename.txt
Pour tester cette fonctionnalité sur l'exemple foxinbox.txt fichier, remplacez le mot socks
avec sandals
uniquement dans la quatrième ligne (4
) du texte à l'aide de la commande :
sed '4 s/socks/sandals/' foxinbox.txt
La sortie montre que la première instance du mot socks
dans la deuxième ligne reste le même, tandis que le même mot a été remplacé par sandals
dans la quatrième ligne.
Remplacer la chaîne uniquement dans une plage spécifique de lignes à l'aide de la commande sed
Pour remplacer plusieurs instances d'une chaîne dans une plage de lignes, mais pas le texte entier, spécifiez la plage où vous voulez sed
substituer. La syntaxe est :
sed '#,# s/old_string/new_string/' filename.txt
Remplacez le premier #
avec le numéro de ligne initial et le second #
avec le dernier numéro de ligne que vous souhaitez inclure.
Par exemple, pour remplacer les deux dernières occurrences du mot chaussettes dans le fichier foxinbox.txt (situé en quatrième et sixième ligne) avec le mot sandals
, vous exécuteriez :
sed '4,6 s/socks/sandals/' foxinbox.txt
Supprimer une ligne spécifique à l'aide de la commande sed
Pour supprimer une ligne d'un fichier avec le sed
commande, utilisez le d
sous-commande et la syntaxe :
sed '#d' filename.txt
Spécifiez le numéro de ligne que vous souhaitez supprimer au lieu du hachage (#
) et exécutez la commande.
Par exemple, pour supprimer la deuxième ligne de foxinbox.txt fichier, tapez :
sed '2d' foxinbox.txt
Supprimer des lignes dans une plage de lignes spécifique à l'aide de la commande sed
Pour supprimer plusieurs lignes dans une plage de lignes à l'aide de sed
commande, suivez la syntaxe :
sed '#,#d' filename.txt
Remplacez les symboles dièses par le début et la fin de la plage de lignes. Par exemple :
sed '2,4d' foxinbox.txt
La commande ci-dessus supprime les lignes 2, 3 et 4 du fichier.
Supprimer du spécifique à la dernière ligne à l'aide de la commande sed
Pour supprimer des lignes d'un numéro de ligne spécifique à la dernière ligne, utilisez la commande :
sed '#,$d' filename.txt
Autrement dit, pour supprimer tout de la ligne 3 à la fin de foxinbox.txt , exécutez cette commande :
sed '3,$d' foxinbox.txt