Comment récupérer une chaine située après une autre chaine?
Fermé
lsda26
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013
-
11 mars 2013 à 12:24
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 16 avril 2013 à 15:01
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 16 avril 2013 à 15:01
A voir également:
- Comment récupérer une chaine située après une autre chaine?
- Chaine tnt gratuite sur mobile - Guide
- Comment récupérer un compte facebook piraté - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Récupérer une vidéo youtube - Guide
- Comment récupérer une adresse mail - Guide
7 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
11 mars 2013 à 12:29
11 mars 2013 à 12:29
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 $
lsda26
Messages postés
68
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 septembre 2013
11 mars 2013 à 12:58
11 mars 2013 à 12:58
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 =)
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
16 avril 2013 à 13:02
16 avril 2013 à 13:02
hello
montre un exemple de ce que tu veux faire
montre un exemple de ce que tu veux faire
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...
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
16 avril 2013 à 14:00
16 avril 2013 à 14:00
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 = . $
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
16 avril 2013 à 14:20
16 avril 2013 à 14:20
La commande "sed" permet d'ajouter un espace après chaque caractère :
$ echo "2243.52474.." | sed 's/./& /g' 2 2 4 3 . 5 2 4 7 4 . .
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
16 avril 2013 à 14:31
16 avril 2013 à 14:31
Oui.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
16 avril 2013 à 14:24
16 avril 2013 à 14:24
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 !
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 16/04/2013 à 15:19
Modifié par dubcek le 16/04/2013 à 15:19
autres méthodes
$ i=2243.52474 $ tab=( $(grep -o . <<<$i) ) $ echo ${tab[@]} 2 2 4 3 . 5 2 4 7 4 $ $ unset tab $ tab=( $(fold -w1 <<<$i) ) $ echo ${tab[@]} 2 2 4 3 . 5 2 4 7 4 $ $ unset tab $ # bash pur $ tab=( ${i//*([:digit:])/ }) $ echo ${tab[@]} 2 2 4 3 . 5 2 4 7 4 $