bash : extraire 1 chaine

bash : extraire 1 chaine - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-08-2011 à 22:28:21    

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

Reply

Marsh Posté le 16-08-2011 à 22:28:21   

Reply

Marsh Posté le 17-08-2011 à 00:24:37    

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

Reply

Marsh Posté le 17-08-2011 à 13:43:44    

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
Reply

Marsh Posté le 17-08-2011 à 21:16:16    

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
Reply

Marsh Posté le 18-08-2011 à 00:49:33    

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.

Reply

Marsh Posté le 18-08-2011 à 13:19:21    

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
Reply

Marsh Posté le 18-08-2011 à 14:54:25    

???

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

Reply

Marsh Posté le 18-08-2011 à 15:36:27    

#!/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
Reply

Marsh Posté le 18-08-2011 à 20:27:31    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed