Comment récupérer une chaine située après une autre chaine?
lsda26
Messages postés
68
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'enregistre les informations suivantes dans une variable et le tout est géré en une seul ligne:
...
iso.3.6.1.2.1.17.4.3.1.2.0.35.94.109.63.225 = INTEGER: 24 iso.3.6.1.2.1.17.4.3.1.2.0.36.232.60.84.3 = INTEGER: 7 iso.3.6.1.2.1.17.4.3.1.2.0.36.232.71.106.40 = INTEGER: 242
...
Je cherche par exemple, à pouvoir récupérer la valeur "7" située juste après "0.36.232.60.84.3 = INTEGER: ".
Sachant que la valeur peut comporter plusieurs chiffres comme avant et après.
Vu que toutes mes données sont enregistrées dans une seul ligne je n'arrive pas à utiliser grep + cut.
Merci de votre aide
J'enregistre les informations suivantes dans une variable et le tout est géré en une seul ligne:
...
iso.3.6.1.2.1.17.4.3.1.2.0.35.94.109.63.225 = INTEGER: 24 iso.3.6.1.2.1.17.4.3.1.2.0.36.232.60.84.3 = INTEGER: 7 iso.3.6.1.2.1.17.4.3.1.2.0.36.232.71.106.40 = INTEGER: 242
...
Je cherche par exemple, à pouvoir récupérer la valeur "7" située juste après "0.36.232.60.84.3 = INTEGER: ".
Sachant que la valeur peut comporter plusieurs chiffres comme avant et après.
Vu que toutes mes données sont enregistrées dans une seul ligne je n'arrive pas à utiliser grep + cut.
Merci de votre aide
A voir également:
- Comment récupérer une chaine située après une autre chaine?
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Comment recuperer une video sur youtube - Guide
- Chaine musique bouygues - Accueil - Guide TV et vidéo
- Comment recuperer un message supprimé sur whatsapp - Guide
7 réponses
Salut,
$ echo "${var}" iso.3.6.1.2.1.17.4.3.1.2.0.35.94.109.63.225 = INTEGER: 24 iso.3.6.1.2.1.17.4.3.1.2.0.36.232.60.84.3 = INTEGER: 7 iso.3.6.1.2.1.17.4.3.1.2.0.36.232.71.106.40 = INTEGER: 242 $ echo "${var}" | sed 's/.*0.36.232.60.84.3 = INTEGER: \([^ ]*\) .*/\1/' 7 $
Merci pour l'info,
J'etait pas pret de trouver cette expression régulière...
J'ai finis par réussir à utiliser un grep + cut :)
J'etait pas pret de trouver cette expression régulière...
J'ai finis par réussir à utiliser un grep + cut :)
Bonjour,
Désolé de déterrer un peu le sujet, mais je recherche moi aussi une méthode pour extraire un seul caractère au choix dans une variable contenant une chaîne de caractère sur une seule ligne.
Je serai donc intéressé par la méthode que tu as trouvé, galérant moi aussi.
Merci =)
Désolé de déterrer un peu le sujet, mais je recherche moi aussi une méthode pour extraire un seul caractère au choix dans une variable contenant une chaîne de caractère sur une seule ligne.
Je serai donc intéressé par la méthode que tu as trouvé, galérant moi aussi.
Merci =)
Bonjour,
en fait, je passe à mon script en paramètre une chaîne de caractère contenant des chiffres (1-9) ou des points, sans espace.
Du coup, un echo $1 donne par exemple "2243.52474.."
Ce que je veux, c'est récupérer un à un chaque caractère, d'abord le 2, puis l'autre 2, puis le 4, etc.. Le but est de représenter cela sous forme d'une matrice.
J'ai essayé comme cela :
Voici l'erreur que j'obtiens à chaque tour de boucle :
et ainsi de suite jusqu'à la dernière boucle...
en fait, je passe à mon script en paramètre une chaîne de caractère contenant des chiffres (1-9) ou des points, sans espace.
Du coup, un echo $1 donne par exemple "2243.52474.."
Ce que je veux, c'est récupérer un à un chaque caractère, d'abord le 2, puis l'autre 2, puis le 4, etc.. Le but est de représenter cela sous forme d'une matrice.
J'ai essayé comme cela :
#!/bin/sh chaine=$1 for i in $(seq 0 80) do tab[$i]=$(${chaine:0:1}) echo "tab[$i] " done
Voici l'erreur que j'obtiens à chaque tour de boucle :
./exo2.sh: 7: ./exo2.sh: Bad substitution ./exo2.sh: 7: ./exo2.sh: tab[0]=: not found tab[0] ./exo2.sh: 7: ./exo2.sh: Bad substitution ./exo2.sh: 7: ./exo2.sh: tab[1]=: not found tab[1] ./exo2.sh: 7: ./exo2.sh: Bad substitution ./exo2.sh: 7: ./exo2.sh: tab[2]=: not found tab[2] ./exo2.sh: 7: ./exo2.sh: Bad substitution ./exo2.sh: 7: ./exo2.sh: tab[3]=: not found tab[3]
et ainsi de suite jusqu'à la dernière boucle...
Salut,
Une solution parmi d'autres...
Une solution parmi d'autres...
$ cat foo.sh #! /bin/bash chaine=( $(sed 's/./& /g' <<<${1}) ) i=1 for car in ${chaine[@]} do echo "Caractère ${i} = ${car}" ((i++)) done $ ./foo.sh "2243.52474.." Caractère 1 = 2 Caractère 2 = 2 Caractère 3 = 4 Caractère 4 = 3 Caractère 5 = . Caractère 6 = 5 Caractère 7 = 2 Caractère 8 = 4 Caractère 9 = 7 Caractère 10 = 4 Caractère 11 = . Caractère 12 = . $
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
utiiser /bin/bash au lieu de /bin/sh
#!/bin/bash chaine=$1 for i in $(seq 0 10) do tab[$i]=${chaine:$i:1} # recupère 1 car. aux positions 0, 1, etc echo "${tab[$i]} " # aff. des éléments d'un tableau, ${} obligatoire done
Génial, merci de la réponse, je comprends mieux mes erreurs !
Et effectivement, par défaut j'étais sous dash et non bash, ça change beaucoup de chose !
Et effectivement, par défaut j'étais sous dash et non bash, ça change beaucoup de chose !