Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1571 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  bash : extraire 1 chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

bash : extraire 1 chaine

n°1287837
acognard
Posté le 16-08-2011 à 22:28:21  profilanswer
 

bonjour a tous,
je seche sur 1 bout de code (c'est trop loin pour pouvoir m'en souvenir !)
 

Code :
  1. #!/bin/bash
  2. cmd=/home/linknx/bcusdk-0.0.5/eibd/usb/findknxusb |grep device:| cut -d: -f2
  3. echo $cmd


 
la commande me fournit cela

Code :
  1. # /home/linknx/bcusdk-0.0.5/eibd/usb/findknxusb
  2. Possible addresses for KNX USB devices:
  3. device: 1:5:1:0:0 (ALBRECHT JUNG GMBH & CO. KG:KNX-USB Data Interface)


 
mon besoin est de retenir que la chaine entre device: et (ALBRE...
 
je tourne en rond car ne sait pas comment extraire entre 2 chaines. De plus, la chaine retournée est sur 2 lignes.
 
Merci pour votre aide.
Arnaud

mood
Publicité
Posté le 16-08-2011 à 22:28:21  profilanswer
 

n°1287842
Profil sup​primé
Posté le 17-08-2011 à 00:24:37  answer
 

salut,
 
en bash

Code :
  1. cmd=$(/home/linknx/bcusdk-0.0.5/eibd/usb/findknxusb)
  2. echo "$cmd"
  3. Possible addresses for KNX USB devices:
  4. device: 1:5:1:0:0 (ALBRECHT JUNG GMBH & CO. KG:KNX-USB Data Interface)
Code :
  1. cmd="${cmd#*$'\n'}"
  2. cmd="${cmd#*: }"
  3. cmd="${cmd% (*}"
  4. echo "$cmd"
  5. 1:5:1:0:0


 
avec sed

Code :
  1. /home/linknx/bcusdk-0.0.5/eibd/usb/findknxusb | sed -n '/^device/s/[^ ]* \([^ ]*\) .*/\1/p'
  2. 1:5:1:0:0

n°1287869
myocastor
Posté le 17-08-2011 à 13:43:44  profilanswer
 

Code :
  1. /home/linknx/bcusdk-0.0.5/eibd/usb/findknxusb | awk '/^device:/{print $2}'


Message édité par myocastor le 17-08-2011 à 13:44:24
n°1287904
acognard
Posté le 17-08-2011 à 21:16:16  profilanswer
 

salut a vous,
trop fort ! Merci deja
dans la continuité , voici ce que je tente de faire, pour finaliser mon petit script.

Code :
  1. #!/bin/bash
  2. #start EIBD & LINKNX
  3. COMMANDeibd=/usr/local/bin/eibd
  4. PIDFILEeibd=/var/run/eibd.pid
  5. usb=/root/script/get_usb.sh
  6. OPTIONSeibd=" -t1023 -i usb:"$usb"  --daemon=/var/log/eibd.log"
  7. echo $OPTIONSeibd


je pense que j'ai trop 1 historique C/windows.
si vous avez encore le temps de m'aider.  
Merci
Arnaud


---------------
NoNo
n°1287913
Profil sup​primé
Posté le 18-08-2011 à 00:49:33  answer
 

salut,
 

Code :
  1. OPTIONSeibd=" -t1023 -i usb:\"$usb\"  --daemon=/var/log/eibd.log"

\" \" si tu as besoin des guillemets, ou alors des guillemets simples, ou rien ^^
 
mais le programme auquel tu vas passer ces options risque de percevoir un seul argument, et ne pas distinguer -t... -i... indépendamment l'un de l'autre.
avec bash et ksh, tu peux contourner ce problème en utilisant un tableau.

n°1287954
acognard
Posté le 18-08-2011 à 13:19:21  profilanswer
 

Salut,
je me suis mal expliqué. Passons par l exemple
 

Code :
  1. # more knx
  2. #!/bin/bash
  3. #start EIBD & LINKNX
  4. COMMANDeibd=/usr/local/bin/eibd
  5. PIDFILEeibd=/var/run/eibd.pid
  6. usb=/root/script/get_usb.sh
  7. OPTIONSeibd=" -t1023 -i usb:$usb  --daemon=/var/log/eibd.log"
  8. echo $OPTIONSeibd
  9. root@CHTIDS:/etc/init.d# ./knx
  10. -t1023 -i usb:/root/script/get_usb.sh --daemon=/var/log/eibd.log


 
je m'attends a recevoir dans la chaine option :
 -t1023 -i usb:1:5:1:0:0 --daemon=/var/log/eibd.log
et Sans guillement.
 
Valeur retournée par le script initial :

Code :
  1. # /root/script/get_usb.sh
  2. 1:5:1:0:0


 
Merci.
Arnaud


Message édité par acognard le 18-08-2011 à 13:21:00

---------------
NoNo
n°1287965
Profil sup​primé
Posté le 18-08-2011 à 14:54:25  answer
 

???

Code :
  1. usb=$(/root/script/get_usb.sh)

n°1287969
twocats
Posté le 18-08-2011 à 15:36:27  profilanswer
 

#!/usr/bin/env bash
#start EIBD & LINKNX
COMMANDeibd=/usr/local/bin/eibd
PIDFILEeibd=/var/run/eibd.pid
usb=$(/home/linknx/bcusdk-0.0.5/eibd/usb/findknxusb | awk '/^device:/{print $2}')
OPTIONSeibd=" -t1023 -i usb:${usb}  --daemon=/var/log/eibd.log"
echo $OPTIONSeibd


On mets '#!/usr/bin/env bash' en shebang pour plus de compatibilité.
On zappe get_usb.sh qui est inutile.


---------------
La réponse est 42
n°1287996
acognard
Posté le 18-08-2011 à 20:27:31  profilanswer
 

merci a vous tous pour votre aide. Vous m'avez fait gagner un temps précieux, et à moins maintenant de comprendre tout cela :)
bravo à vous.
Arnaud


---------------
NoNo

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  bash : extraire 1 chaine

 

Sujets relatifs
[passwd] - affecter directement un passwd à la création d'un user [RESScript Bash sauvegarde
[Résolu] Bash - Exporter sans interpréter.[BASH] Existence de fichiers par extension
[Bash] Modifier une partie d'une variable mais pas tout !!Aide pour script bash
[bash] tester si une variable (multivaluée) est vide[BASH] Récupérer un morceau de variable...
[BASH] - Variables et substitution -Resolu[Linux - Bash] organiser un groupe de lettres par ordre ALPHA
Plus de sujets relatifs à : bash : extraire 1 chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR