GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la commande Sed sous Linux avec des exemples

SED en abrégé "Stream Editor" est un puissant éditeur de flux de texte qui peut exécuter de nombreuses fonctions sur des fichiers de recherche, de recherche, de remplacement et d'insertion. La commande sed est une commande compatible avec les expressions régulières, ce qui signifie qu'elle peut comprendre les expressions régulières qui lui sont fournies.

Cependant, SED est principalement ou principalement utilisé pour la substitution de texte. Avec l'aide de SED, nous pouvons éditer des fichiers sans les ouvrir, ce qui sera beaucoup plus rapide et plus rapide pour trouver et remplacer quelque chose dans un fichier, plutôt que d'ouvrir le fichier et de le modifier.

Dans ce tutoriel, nous allons apprendre la commande SED avec des exemples faciles à utiliser et à comprendre dans notre shell Linux.

Syntaxe de la commande Sed

La syntaxe de la commande Sed est assez simple à comprendre mais est très puissante à l'usage. Voici la syntaxe de base de SED comme suit :

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Considérez le fichier texte ci-dessous ('content.txt') comme une entrée pour la commande sed examples.

$ cat > content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

Voici les exemples sed les plus utilisés comme suit.

1. Remplacement de chaîne (mots ou caractères)

Sed peut être utilisé pour rechercher et remplacer une chaîne (mots ou caractères) sur l'entrée. L'option s est utilisé pour remplacer une chaîne. Par défaut, la commande sed ne remplace que la première occurrence de la chaîne dans une ligne.

La commande suivante remplace le mot 'lorem' par 'Lorem' dans le fichier 'content.txt' pour la première occurrence de chaque ligne :

$ sed 's/lorem/Lorem/' content.txt

Ici 'lorem' est la chaîne de recherche et 'Lorem' est la chaîne de remplacement.

Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

2. Remplacer toutes les occurrences d'une chaîne dans un fichier

Pour rechercher et remplacer toutes les occurrences d'une chaîne dans un fichier, utilisez /g (remplacement global).

Dans la commande suivante, /g flag est utilisé pour remplacer toutes les occurrences de la chaîne 'lorem' par 'Lorem' dans le fichier 'content.txt'.

$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

3. Remplacement de la nième occurrence d'un motif dans une ligne

La commande sed peut être utilisée avec /1 ,/2 ou n (n'importe quel nombre) pour remplacer la première, deuxième ou nième occurrence d'une chaîne dans une ligne.

La commande suivante remplace la deuxième (2) occurrence du mot 'lorem' par 'Lorem' dans chaque ligne.

$ sed 's/lorem/Lorem/2' content.txt

lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

Semblable à la commande tr, sed peut remplacer toutes les occurrences de caractères dans set1 par les caractères correspondants dans set2 en utilisant y/set1/set2/ .

$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple

4. Remplacer de la nième occurrence à toutes les occurrences de chaque ligne

Nous pouvons utiliser une combinaison de /1 ,/2 ou n (n'importe quel nombre) et /g pour remplacer tous les motifs à partir de la nième occurrence d'une chaîne dans chaque ligne.

Dans l'exemple suivant, toutes les occurrences de la chaîne 'lorem' seront remplacées par 'Lorem' à partir de la 2ème occurrence de chaque ligne :

$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

5. Rechercher et remplacer une chaîne sur un numéro de ligne spécifié

Avec sed, nous pouvons limiter la fonction uniquement pour remplacer la chaîne sur un numéro de ligne spécifique.

Dans la commande suivante, nous pouvons constater que seule la deuxième ligne est remplacée par la chaîne 'Lorem'.

$ sed '2 s/lorem/Lorem/' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

6. Afficher le texte partiel d'un fichier

En utilisant la commande sed, vous pouvez afficher une partie d'un fichier plutôt que le fichier entier. Le -n l'option est utilisée pour supprimer l'impression de tout le contenu et p l'option est utilisée pour imprimer des lignes spécifiques.

La commande suivante imprimera les lignes de 2 à 4 :

$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

7. Afficher tout le contenu sauf certaines lignes

La commande Sed permet d'afficher tout le contenu du fichier à l'exception de lignes particulières. Dans la commande suivante, affichez tout le contenu du fichier 'content.txt' à l'exception des lignes 1 et 2 :

$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

8. Afficher toutes les lignes sauf la ligne de correspondance de modèle

Nous pouvons utiliser la commande sed suivante pour supprimer la ligne contenant le modèle de recherche mentionné. Dans la sortie, la ligne avec "learn" est supprimée car elle correspond au modèle de recherche.

$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

9. Afficher les lignes remplacées

Pour imprimer les lignes remplacées, nous utilisons /p drapeau avec -n .

Dans la sortie, nous pouvons voir qu'il n'y a pas la dernière ligne car elle n'avait pas le modèle de recherche 'lorem'.

$ sed -n 's/lorem/Lorem/p' content.txt

Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

Plus d'exemples d'indicateurs 'p' et 'n'

Imprimer la première ligne

$ sed -n '1p' content.txt

Imprimer la plage de ligne

$ sed -n '1,4p' content.txt

Imprimer plusieurs lignes

$ sed -n '1p;4p' content.txt

Imprimer un fichier

$ sed -n 'p' content.txt

L'impression contient une expression régulière ou un mot

$ sed -n '/RedHat/p' content.txt

Imprimer si contient des chiffres

$ sed -n '/[0-9]/p' content.txt

Faites correspondre l'expression régulière et remplacez

$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

Utiliser sed comme grep

La commande sed suivante recherchera l'utilisateur 'root' dans le fichier '/etc/passwd' :

$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

10. Combiner les commandes SED

Si nous devons effectuer plusieurs expressions sed, nous devons utiliser e possibilité d'enchaîner les commandes sed.

Prenons un exemple, pour remplacer toutes les occurrences du "lorem" par "Lorem" et supprimer la ligne qui correspond au motif de recherche.

$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt

Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

11. Insérer une ligne vide après chaque ligne

Utilisation de G option, vous pouvez insérer une ou plusieurs lignes vides dans un fichier.

La commande suivante insère une seule ligne vide entre les lignes :

$ sed G content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

Pour insérer deux lignes vides, exécutez la commande ci-dessous :

$ sed 'G;G' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

11. Modifier et créer une copie de sauvegarde du fichier d'origine

Sed permet de modifier un fichier et en même temps de créer une copie de sauvegarde du fichier original. Nous utilisons 'i.' pour le nom du fichier de sauvegarde et -e modification.

La commande suivante crée une sauvegarde du fichier d'origine 'content.txt' en tant que 'content.txt.bak'

$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

12. Supprimer une ligne avec un motif

En utilisant cette commande sed, vous pouvez supprimer une ligne commençant par une chaîne particulière et se terminant par une autre chaîne. Dans la sortie suivante, la ligne commençant par « lorem » et se terminant par « text. » est supprimé :

$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

13. Ajouter une chaîne aux lignes

Nous pouvons exécuter la commande suivante afin d'ajouter du contenu avant chaque ligne en utilisant regex.

Dans la sortie suivante, nous pouvons voir que "Ici" est ajouté devant chaque ligne.

$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.

Insérez une chaîne avant chaque ligne :

$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.

Ajouter une chaîne après chaque ligne :

$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line

14. Extraire les noms d'utilisateur du fichier /etc/passwd

La commande sed peut être facilement utilisée pour obtenir toute la liste de tous les noms d'utilisateur à partir du fichier '/etc/passwd'.

La commande sed suivante extraira tous les noms d'utilisateur disponibles sous Linux :

$ sed 's/\([^:]*\).*/\1/' /etc/passwd
root
daemon
bin
sys
sync
man
lp
news
uucp
proxy
backup
list
gnats
nobody
systemd-network
systemd-resolve
syslog
messagebus
uuidd
debian-spamd
admin

15. Imprimer ligne sans lignes commentées (#) &lignes vides

L'impression sans lignes commentées (#) et les lignes vides sont simples avec sed.

Nous pouvons exécuter la commande suivante pour imprimer toutes les lignes qui ne contiennent pas de symbole de commentaire (#) et toutes les lignes vides.

$ sed -e 's/#.*//;/^$/d' content.txt

Pour supprimer uniquement les lignes commentées :

$ sed -e 's/#.*//' content.txt

16. Extraire toutes les adresses IP avec sed d'une chaîne

Voyons comment extraire les adresses IP à l'aide de la commande sed avec regex. J'ai ajouté quelques adresses IP à 'content.txt' pour les tests.

$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Utilisons maintenant regex pour extraire l'adresse IP du fichier 'content.txt' comme suit :

$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

J'ai trouvé une autre commande facile pour obtenir les mêmes résultats, vérifiez ci-dessous :

$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

Nous pouvons également combiner sed avec une autre commande à l'aide de canaux (|), consultez l'exemple ci-dessous :

$ ip addr | sed -n '/inet/p' | sed -e 's/  */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64

17. Rediriger et écrire dans un fichier

Le w flag peut être utilisé pour écrire la sortie dans un fichier, au lieu de l'imprimer sur la sortie standard. Le w La commande nécessite un nom de fichier dans lequel la sortie sera écrite.

La commande sed suivante redirigera la sortie vers un nouveau fichier 'rootpwd.txt' :

$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash

Conclusion

Dans ce tutoriel de commande Linux, nous avons appris la syntaxe de base de la commande sed et avec les exemples sed les plus couramment et les plus utilisés. On peut utiliser sed dans les scripts bash ou shell pour effectuer différentes tâches automatisées dans la manipulation de texte et les opérations sed dans le shell Linux. Avec ce didacticiel, on peut facilement comprendre sed et commencer à l'implémenter immédiatement si nécessaire. Si vous avez des questions, des suggestions ou des commentaires, veuillez les écrire dans la zone de commentaires ci-dessous.


Linux
  1. Comment utiliser la commande Linux Hexdump avec des exemples pratiques

  2. Comment utiliser les canaux et les canaux nommés sous Linux (avec exemples)

  3. Commande SCP sous Linux :comment l'utiliser, avec des exemples

  4. Comment utiliser la commande Rmmod sous Linux avec des exemples

  5. Comment utiliser la commande Vmstat sous Linux expliquée avec des exemples

Comment utiliser la commande who sous Linux avec des exemples

Commande d'alias Linux :comment l'utiliser avec des exemples

Comment utiliser la commande Linux gunzip avec des exemples

Comment utiliser la commande Linux rm avec des exemples

Comment installer et utiliser la commande Ack sous Linux avec des exemples

Comment utiliser la commande Sleep sous Linux :expliqué avec des exemples