GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Linux sed :comment utiliser l'éditeur de flux

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

Linux
  1. Comment utiliser la commande Linux sed

  2. Comment utiliser la commande Linux grep

  3. Comment utiliser la commande history sous Linux

  4. Comment utiliser la commande id sous Linux

  5. Comment utiliser la commande "screen" sous Linux

Comment utiliser Nano, l'éditeur de texte en ligne de commande Linux

Comment utiliser la commande fd sur le système Linux

Comment utiliser la commande wget sous Linux ?

Comment utiliser la commande xargs sous Linux ?

Comment utiliser la commande RPM sous Linux

Comment utiliser la commande which sous Linux