GNU/Linux >> Tutoriels Linux >  >> Linux

10 Exemples de commande Sed (éditeur de flux)

Sed est un éditeur de flux dans un système d'exploitation de type UNIX utilisé pour filtrer et transformer du texte. Sed est dérivé à l'origine de l'éditeur de ligne de base "ed", un éditeur que vous trouverez sur tous les systèmes Unix mais qui est rarement utilisé en raison de son interface utilisateur difficile.

Comment fonctionne sed ?

Comme sed est un éditeur de flux, il effectue son travail sur un flux de données qu'il reçoit de stdin, par exemple via un tube, en écrivant ses résultats sous forme de flux de données sur stdout (souvent un écran de bureau). Nous pouvons rediriger cette sortie vers un fichier . Sed ne modifie généralement pas un fichier d'entrée d'origine ; à la place, nous pouvons envoyer le contenu de notre fichier via un tube pour qu'il soit traité par sed. Cela signifie que nous n'avons pas besoin d'avoir un fichier sur le disque avec les données que vous souhaitez modifier, ceci est particulièrement utile si vous avez des données provenant d'un autre processus plutôt que déjà écrites dans un fichier.

Syntaxe de sed

# sed [option] commands [input-file]

Dans cet article, nous discuterons de certains des exemples pratiques de la commande sed, nous effectuerons de nombreuses opérations sed sur le fichier 'passwd', donc copiez d'abord le fichier '/etc/passwd' dans le dossier /tmp.

# cp /etc/passwd /tmp/

Exemple 1 :Supprimer toutes les lignes avec sed

# cat /tmp/passwd | sed 'd'

La commande ci-dessus a envoyé tout le contenu du fichier /tmp/passwd via un canal vers sed. Gardez à l'esprit que le fichier /tmp/passwd n'a pas du tout été modifié. Sed a seulement lu le contenu du fichier et nous ne lui avons pas dit d'écrire dans le fichier, seulement de le lire. Les résultats des commandes d'édition sur chaque ligne sont imprimés sur la sortie standard. Dans ce cas, rien n'a été imprimé à l'écran car nous avons utilisé l'option 'd' pour supprimer chaque ligne.

Exemple 2 :Invoquer sed avec l'option '-e' (ajouter le script aux commandes à exécuter)

Au lieu d'invoquer sed en lui envoyant un fichier via un tube, nous pouvons demander à sed de lire les données d'un fichier, comme indiqué dans l'exemple ci-dessous.

# sed -e 'd' /tmp/passwd
#

Invoquer sed de cette manière définit explicitement la commande d'édition comme un script sed à exécuter sur le fichier d'entrée /tmp/passwd. Le script est simplement une commande d'édition d'un caractère ici, mais il pourrait être beaucoup plus volumineux.

Nous pouvons également rediriger la sortie standard de la commande sed dans un fichier.

# sed -e 'd' /tmp/passwd > /tmp/new-passwd

Exemple 3 :Impression de lignes à l'aide de sed (indicateur -n et commande p)

Le drapeau '-n' désactive l'impression automatique afin que sed n'imprime à la place des lignes que lorsqu'il est explicitement invité à le faire avec la commande 'p'.

# cat /tmp/passwd | sed 'p' | head -5
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

Comme nous le voyons ci-dessus, si nous spécifions la commande d'édition "p" sans le drapeau "-n", sed imprimera les lignes en double. Donc, pour afficher des lignes uniques, utilisez le drapeau '-n' avec la commande p dans sed. Des exemples sont présentés ci-dessous :

# cat /tmp/passwd | sed -n 'p' | head -5
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

Exemple 4 :Modification du fichier source à l'aide de l'option "-i"

La commande Sed par défaut ne modifie pas le fichier original ou source pour notre sécurité, mais en utilisant l'option "-i", le fichier source peut être modifié.

# sed -i '1d' /tmp/passwd

La commande ci-dessus supprimera la première ligne du fichier source /tmp/passwd.

Exemple 5 :Sauvegardez le fichier source avant de le modifier

Lorsque nous utilisons l'option '-i' dans la commande sed, cela devient très risqué car cela modifiera directement le fichier source, il est donc préférable de sauvegarder le fichier source avant de le modifier, l'exemple est illustré ci-dessous.

# sed -i.bak '1d' /tmp/passwd
# ls -l /tmp/passwd*
-rw-r--r-- 1 root root 2229 Nov 24 22:36 /tmp/passwd
-rw-r--r-- 1 root root 2261 Nov 24 22:35 /tmp/passwd.bak

Dans la commande sed ci-dessus, la 1ère ligne du fichier /tmp/passwd sera supprimée mais avant cette commande sed prend la sauvegarde de /tmp/passwd en tant que /tmp/passwd.bak.

Exemple 6 :suppression des lignes en spécifiant la plage.

Suppression des 5 premières lignes du fichier /tmp/passwd.

# cat /tmp/passwd | sed '1,5d'

Exemple 7 :Supprimer les lignes vides d'un fichier

# cat /tmp/detail.txt 
245
678

linux
unix

suse

Dans le fichier details.txt, nous avons deux lignes vides, utilisez la commande ci-dessous pour supprimer les lignes vides.

# sed '/^$/d' /tmp/detail.txt
245
678
linux
unix
suse

Exemple 8 :Supprimer les lignes contenant les chaînes

Supposons que nous voulions supprimer la ligne du fichier /tmp/passwd qui contient le mot "jeux".

# sed '/games/d' /tmp/passwd

Exemple 9 :Rechercher et remplacer des chaînes dans le fichier

Supposons que vous vouliez remplacer le « racine » par « Admin », l'exemple est illustré ci-dessous :

# sed 's/root/Admin/' /tmp/passwd

Il est très important de noter que sed remplace uniquement la première occurrence sur une ligne. Si la chaîne 'root' apparaît plus d'une fois sur une ligne, seule la première correspondance sera remplacée. Pour remplacer chaque chaîne du fichier par la nouvelle au lieu de la première occurrence uniquement, pour effectuer une substitution globale, ajoutez une lettre "g" à la fin de la commande, comme indiqué ci-dessous :

# sed 's/root/Admin/g' /tmp/passwd

Exemple 10 :substitution multiple à l'aide de l'option -e

Supposons que nous voulions remplacer la chaîne "root" par "Admin" et la chaîne "bash" par "sh". L'exemple est illustré ci-dessous :

# cat /tmp/passwd | sed -e 's/root/Admin/g' -e 's/bash/sh/g'


Linux
  1. Commande mv sous Linux :7 exemples essentiels

  2. ln Exemples de commandes sous Linux

  3. Exemples de commandes gzip sous Linux

  4. plus d'exemples de commandes sous Linux

  5. file Exemples de commandes sous Linux

Commande Linux WC avec exemples

Exemples de commande Linux cat

Exemples de commande Linux gzip

Exemples de commandes dumpe2fs sous Linux

Exemples de commandes fsck sous Linux

Exemples de commandes mkfs sous Linux