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".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 26/11/2012, à 11: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, à 10: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, à 11: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, à 12: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, à 17: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ᴉsdnGMT-4

Hors ligne

#5 Le 26/11/2012, à 20: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, à 21: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, à 21: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, à 21: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, à 21: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

En ligne

#10 Le 27/11/2012, à 01: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, à 03: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ᴉsdnGMT-4

Hors ligne

#12 Le 27/11/2012, à 11: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, à 11: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, à 15: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, à 16: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, à 16: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, à 09: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, à 10: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, à 16: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, à 17: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, à 17: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ᴉsdnGMT-4

Hors ligne

#19 Le 12/01/2013, à 18: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, à 18:14)


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

Hors ligne

Haut de page ↑