Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 26/11/2012, à 10:31

ar barzh paour

[Résolu] renvoi inattendu par "cut"

bonjour à tous
voilà un résultat que je n'attendais pas

xxx@-desktop:~$ echo "tañva"|cut -c1-4
tañ

je m'attendais à obtenir "tañv" bien sur et
je me demandais pourquoi mon programme ne fonctionnait pas
en fait le code exact de mon programme est celui-ci :

res=`echo "$1"|cut -c1-${#2}`

auriez-vous une solution ?

Dernière modification par ar barzh paour (Le 29/11/2012, à 09:06)


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#2 Le 26/11/2012, à 10:59

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

en attendant une meilleure solution voilà ce que j'ai fait

motplus=$2"x" # augmentation artificielle de la longueur du mot recherché
res=`echo "$1"|cut -c1-${#2}`
resplus=`echo "$1"|cut -c1-${#motplus}`
if [[ $res = $2 || $resplus = $2 ]]
     then
         return 0
     else 
         return 1
fi

mais augmentation du temps de calcul .....


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#3 Le 26/11/2012, à 11:08

Watael

Re : [Résolu] renvoi inattendu par "cut"

salut,

si tu es sur du bash, tu peux exploiter le Développement des sous-chaînes

$ var="tañva"
$ echo "${var:0:4}" #le zéro est facultatif
tañv

eval, c'est mal.

Hors ligne

#4 Le 26/11/2012, à 16:46

nesthib

Re : [Résolu] renvoi inattendu par "cut"

@ar barzh paour : c'est un bug connu de cut avec l'utf-8. Ton caractère « ñ » est codé sur 2 octets en utf-8. Peut être que tu peux relancer le rapport de bug ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 26/11/2012, à 19:37

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

@watael : oui je suis en bash  j'ai modifié mon code ainsi :

function deb_mot_OK {	
			#recoit	
			#	$1=ligne dans laquelle rechercher le mot
			#	$2=début du mot à chercher
			# code de retour
				#0 si début de la ligne est égal au mot à chercher
				#1 sinon
res=`echo "${1:0:${#2}}"`
if [[ $res = $2 ]]
then
     return 0
else
     return 1
fi
}

ça à l'air de tourner impec !
où puis-je trouver cette documentation qui explique cette syntaxe ?

@nethib
oui ñ=C3 B1
je vais me renseigner pour savoir comment relancer un bug, car je ne sais pas faire


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#6 Le 26/11/2012, à 20:08

pingouinux

Re : [Résolu] renvoi inattendu par "cut"

Bonsoir,
Ceci devrait être équivalent :

if grep -q "^$2" <<<"$1"
then
  return 0
else
  return 1
fi

Hors ligne

#7 Le 26/11/2012, à 20:19

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

bonsoir pingouinux
oui ça marche aussi
que veulent dire les "<<<" ? je connaissais "<" et "<<" mais pas "<<<"


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#8 Le 26/11/2012, à 20:25

pingouinux

Re : [Résolu] renvoi inattendu par "cut"

ar barzh paour a écrit :

que veulent dire les "<<<" ?

Le texte à droite de <<< est transmis à la commande en tant que "standard input".

Extrait de man bash

Here Strings
       A variant of here documents, the format is:

              <<<word

       The word is expanded and supplied to the command on its standard input.

Hors ligne

#9 Le 26/11/2012, à 20:53

BrunoGey

Re : [Résolu] renvoi inattendu par "cut"

ar barzh paour a écrit :

bonjour à tous
voilà un résultat que je n'attendais pas

xxx@-desktop:~$ echo "tañva"|cut -c1-4
tañ

je m'attendais à obtenir "tañv" bien sur et
je me demandais pourquoi mon programme ne fonctionnait pas
en fait le code exact de mon programme est celui-ci :

res=`echo "$1"|cut -c1-${#2}`

auriez-vous une solution ?

Bonsoir,

j'espère ne pas dire une connerie, sinon rectifiez svp.
voilà :
mon sentiment est que tañva"|cut -c1-4, compte 4 lettres depuis le dbut du mot pour donner  tañv
alors que echo "$1"|cut -c1-${#2}, le #2 entre crochets, compte 2 lettres depuis la fin du mot, pour donner tañ

ta syntaxe ${#num}, est différente de -num

d'accord ?

cdt

bruno

Hors ligne

#10 Le 27/11/2012, à 00:04

Watael

Re : [Résolu] renvoi inattendu par "cut"

en effet.

${#2} est le nombre de caractères contenu dans le deuxième paramètre postitionnel.


eval, c'est mal.

Hors ligne

#11 Le 27/11/2012, à 02:27

nesthib

Re : [Résolu] renvoi inattendu par "cut"

@ar barzh paour : pour relancer le bug il suffit de suivre mon précédent lien et de poster un commentaire comme quoi tu es aussi affecté. Pour la syntaxe ${parameter:offset:length}, tu trouveras tous les détails dans le man de bash à la section Parameter Expansion.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#12 Le 27/11/2012, à 10:15

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

@nethib et pingouinux , je ne pense jamais aux solutions les plus simples !
man bash !!!!!! c'est si simple j'y vais
et merci pour l'explication des "<<<"

BrunoGey a écrit :

echo "$1"|cut -c1-${#2}, le #2 entre crochets, compte 2 lettres depuis la fin du mot, pour donner tañ

non dans mon post 5 je développe un peu plus
1 est le premier paramètre reçu par la fonction
2 est le deuxième paramètre reçu par la fonction

en bash    {#2} donne la longueur du paramètre N°2
si la fontion deb_mot_OK recoit comme deuxième paramètre tañv
{#2} a comme valeur 4

exemple

#!/bin/bash
function deb_mot_OK {	
echo "longueur :" ${#1} "(paramètre 1 =$1)"
echo "longueur :" ${#2} "(paramètre 2 =$2)"
}
deb_mot_OK "123456789" "tañv"
read g

le résultat donne

longueur : 9 (paramètre 1 =123456789)
longueur : 4 (paramètre 2 =tañv)

il faut remarquer que ${#2}  avec 2=tañv donne bien 4

Dernière modification par ar barzh paour (Le 27/11/2012, à 10:17)


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#13 Le 27/11/2012, à 14:30

elendil

Re : [Résolu] renvoi inattendu par "cut"

Salut,

Juste pour compléter cette page : http://abs.traduc.org/abs-5.0-fr/ch09s02.html m'a souvent beaucoup aidée...

Elendil

Hors ligne

#14 Le 27/11/2012, à 15:12

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

@elendil
super ! merci pour le lien
pour info j'y ai même trouvé une version plus récente le meme en 6.4.05

Dernière modification par ar barzh paour (Le 27/11/2012, à 15:37)


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#15 Le 29/11/2012, à 08:40

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

je mets résolu
en effet "cut" est buggé (post #4 de nethib)
et on m'a donné un paliatif (post #3 Watael) (post #6 pingouinux)
et plein d'explications ....
@nesthib
j'ai essayé de relancer le bug en ajoutant un commentaire sur launchpad(2012-11-29)
à+

Dernière modification par ar barzh paour (Le 29/11/2012, à 09:05)


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#16 Le 12/01/2013, à 15:29

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

ah bien je trouve aussi ceci

echo `echo "ñ"|wc -c`
3

si on tient compte d'un éventuel saut de ligne je devrait obtenir 2 et non 3
je confirme par

echo `echo "ññññ"|wc -c`
9

wc compte bien 2 caractères pour le ñ !!!! et non 1


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

#17 Le 12/01/2013, à 16:36

pingouinux

Re : [Résolu] renvoi inattendu par "cut"

Bonjour ar barzh paour,
C'est normal, il faut utiliser -m au lieu de -c. Voici un extrait de man wc :

-c, --bytes
              print the byte counts

       -m, --chars
              print the character counts

$ wc -c <<<"ééé"
7

$ wc -m <<<"ééé"
4

Hors ligne

#18 Le 12/01/2013, à 16:52

nesthib

Re : [Résolu] renvoi inattendu par "cut"

+1

petite question, pourquoi faire un :

echo `echo…`

c'est inutile, non ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#19 Le 12/01/2013, à 17:10

ar barzh paour

Re : [Résolu] renvoi inattendu par "cut"

bonne année à tous !! bien noté
@pingouinux
oui je lis la doc trop en biais ... et je ne la connais plus suffisamment ,
il y a quelques années on disait -c = caractères ... sad
-c compte le nombre d'octets
-m compte le nombre de caractères
@nesthib
oui j'étais parti sur autre chose un seul suffit

echo "ññññ"|wc -m
5

Dernière modification par ar barzh paour (Le 12/01/2013, à 17:14)


Ubuntu 14.04.4 LTS 32 bits
Intel(R) Core(TM)2 Duo CPU     E7400  @ 2.80GHz

Hors ligne

Haut de page ↑