Commande shell

Résolu
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. merci pour tous vos réponse :)
    0
    1. Contributeur
      bonjour,
      on se demande si nos réponses l'on intéressé :-)
      a+
      0
      1. Modérateur
        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
        1. Pour ma part j'aurais fait comme ça :

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


          Ce qui me donne :
          2:23
          0
          1. Contributeur
            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. Modérateur
              Salut,

              Elle sert à quoi la commande "sed" ???
              Y'a pas de "to=<" ni de ">" dans la ligne récupérée ;-\
              0
          2. Modérateur
            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. pourrais tu m'expliquer un peu le code??
              merci
              0
            2. Modérateur
              -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