Exemples de scripts Sed

Droits : modification de la sortie d'un ls -l (symbolique vers octal)
  Fichier script droits.sed :
# Nicolas Pons (19/11/2004)
# Modifie l'affichage des droits Unix dans un `ls -l`.
# La notation symbolique est remplacée par de l'octal.
#
# Usage : ls -l | sed -f [ce fichier]

# Ajout d'une ligne d'entête
1i\
-------------- Début du traitement sed --------------
# Suppression de la ligne contenant "total" dans l'affichage
# du `ls -l`
/total/d
# Conversion notation symbolique -> octal
s/rwx/7/g
s/rw-/6/g
s/r-x/5/g
s/r--/4/g
s/-wx/3/g
s/-w-/2/g
s/--x/1/g
s/---/0/g
# Ajout d'une ligne en fin de traitement
$a\
--------------  Fin du traitement sed  --------------
Exemple d'exécution :
$ ls -l
total 32
-rw-r--r--    1 nicolas  users         816 Mar  2 11:14 droits.awk
-rw-r--r--    1 nicolas  users         570 Mar  2 11:13 droits.sed
-rw-r--r--    1 nicolas  users          81 Dec  6 16:12 fic1
-rw-r--r--    1 nicolas  users         119 Dec  6 16:15 fic2
-rw-r--r--    1 nicolas  users           7 Dec  6 15:25 fichier2
lrwxrwxrwx    1 nicolas  users           8 Dec  6 15:26 fichier3 -> fichier1
-rw-r--r--    1 nicolas  users          90 Mar  2 10:58 numeros
drwxr-xr-x    2 nicolas  users        4096 Dec  6 15:46 rep
drwxr-xr-x    3 nicolas  users        4096 Dec  6 16:52 ttt
$ ls -l | sed -f droits.sed    
-------------- Début du traitement sed --------------
-644    1 nicolas  users         816 Mar  2 11:14 droits.awk
-644    1 nicolas  users         570 Mar  2 11:13 droits.sed
-644    1 nicolas  users          81 Dec  6 16:12 fic1
-644    1 nicolas  users         119 Dec  6 16:15 fic2
-644    1 nicolas  users           7 Dec  6 15:25 fichier2
l777    1 nicolas  users           8 Dec  6 15:26 fichier3 -> fichier1
-644    1 nicolas  users          90 Mar  2 10:58 numeros
d755    2 nicolas  users        4096 Dec  6 15:46 rep
d755    3 nicolas  users        4096 Dec  6 16:52 ttt
--------------  Fin du traitement sed  --------------
Sélection : Affichage de la ligne n à la ligne m incluses du contenu d'un fichier
  Exemple : affichage des lignes 198 à 201 du fichier /etc/services
$ sed -n '198,201p' /etc/services 
ircs            994/tcp                         # IRC over SSL
ircs            994/udp                         # IRC over SSL
pop3s           995/tcp                         # POP-3 over SSL
pop3s           995/udp                         # POP-3 over SSL
Ceci est plus rapide que d'utiliser les commandes head et tail :
$ time sed -n '198,201p' /etc/services 
ircs            994/tcp                         # IRC over SSL
ircs            994/udp                         # IRC over SSL
pop3s           995/tcp                         # POP-3 over SSL
pop3s           995/udp                         # POP-3 over SSL

real    0m0.006s
user    0m0.000s
sys     0m0.010s
$ time head -201 /etc/services | tail +198
ircs            994/tcp                         # IRC over SSL
ircs            994/udp                         # IRC over SSL
pop3s           995/tcp                         # POP-3 over SSL
pop3s           995/udp                         # POP-3 over SSL

real    0m0.061s
user    0m0.000s
sys     0m0.060s
   

Retour à l'accueil