Commande shell

Résolu
lamou23 Messages postés 218 Statut Membre -  
lamou23 Messages postés 218 Statut Membre -
salut,

quelqu'un pourra t-il me proposer une solution meuilleure pour récupérer seulement, la durée de fonction du système à partir du uptime, autrement dit si la valeur du "uptime" est :

15:32:02 up  1:19,  5 users,  load average: 4.47, 5.55, 5.55


je veux seulement récupérer :
1:19

en utilisant des commandes shell

et si le uptime est:
 1:07pm  up 11 day(s), 19 min(s),  1 user,  load average: 0.50, 0.46, 0.66

je voudrais récupérer:

11 day(s), 19 min(s)


plus exactement, je veux récupérer le résultat de la commande "uptime" compris entre les deux mots"up" et "user":
 up 11 day(s), 19 min(s),  1 user
 up  1:19,  5 users


merci d'avance

7 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    $ cat plop 
    
    15:32:02 up  1:19,  5 users,  load average: 4.47, 5.55, 5.55 
    
    
    
    je veux seulement récupérer : 
    
    1:19 
    
    
    en utilisant des commandes shell 
    
    et si le uptime est: 
    
     1:07pm  up 11 day(s), 19 min(s),  1 user,  load average: 0.50, 0.46, 0.66 
    
    $ sed -n 's/.* up \(.*\),  *[[:digit:]]*  *users*.*/\1/p' plop 
     1:19 
    11 day(s), 19 min(s)

    ;-))

    $ man woman
    Il n'y a pas de page de manuel pour woman.

    GNU/Linux : Gnu/Linux is Not Ubuntu !
    0
    1. lamou23 Messages postés 218 Statut Membre
       
      pourrais tu m'expliquer un peu le code??
      merci
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      -n
      Affichage que dur demande, associée au flag  "p" (voir plus loin)
      
      
      s
      Commande de substitution
      
      
      .* up 
      Cette première expression matche tout (.*) ce qui précède le mot "up" plus l'espace qui le suit
      
      
      \(.*\)
      Sous-expression délimitée par des accolades protégées, sensée contenir ce qui sera affiché plus tard par son référencement (\1).
      
      
      ,  *[[:digit:]]*  *users*.*
      Ici on matche une virgule (,) suivie d'au moins un espace ou plusieurs (  *), suivis d'au moins un chiffre ou de plusieurs ([[:digit:]]*), suivis d'au moins un espace ou plusieurs (  *), puis du mot "user" avec ou sans "s" final (s*), puis le reste de la ligne (.*)
      
      
      \1
      Référence arrière. C'est elle qui sera affichée. Elle matche tout ce qui se trouve dans l'expression "\(.*\)"
      
      
      p
      On affiche que la partie concernée.
      0
  2. jeanbi Messages postés 15399 Date d'inscription   Statut Contributeur Dernière intervention   2 383
     
    re,
    moi j'avais bien aime
    uptime >tim
    [localhost Documents]$ cat tim
     19:09:24 up  2:22,  3 users,  load average: 0.08, 0.05, 0.10
     awk '{print $1,$3}' tim | sed 's/to=<//;s/>//'
    19:09:24 2:22,

    a+
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Elle sert à quoi la commande "sed" ???
      Y'a pas de "to=<" ni de ">" dans la ligne récupérée ;-\
      0
  3. Lucas
     
    Pour ma part j'aurais fait comme ça :

    up=$(uptime | awk '{print $3":"$4}')  
    up=${up%,*}  
    


    Ce qui me donne :
    2:23
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Malekal_morte- Messages postés 178136 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   24 712
     
    et aussi ...A partir du fichier /proc/uptime qui renvoie en secondes :)

    malekalmorte@MaK-tux:~$ i='cat /proc/uptime|sed -n 's/\([0-9]\+\)\..*/\1/p''; echo $i secs ; echo $(($i / 60))min ; echo $(($i / 60 / 60 ))h ; echo $(($i / 60 / 60 / 24))day  
    3063 secs  
    51min  
    0h  
    0day  
    malekalmorte@MaK-tux:~$ i='cat /proc/uptime|sed -n 's/\([0-9]\+\)\..*/\1/p''; echo $i secs ; echo $(($i / 60))min ; echo $(($i / 60 / 60 ))h ; echo $(($i / 60 / 60 / 24))day
    3201 secs
    53min
    0h
    0day


    Les hommes réunissent tous les erreurs de leur vie et créent un monstre qu'il appelle destin.
    0
  6. jeanbi Messages postés 15399 Date d'inscription   Statut Contributeur Dernière intervention   2 383
     
    bonjour,
    on se demande si nos réponses l'on intéressé :-)
    a+
    0
  7. lamou23 Messages postés 218 Statut Membre
     
    merci pour tous vos réponse :)
    0