OVH Cloud OVH Cloud

Compter un caractère

12 réponses
Avatar
ozzii23
Bonjour,

J'ai un probl=E8me:

Je n'arrive pas =E0 faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caract=E8re dans une ligne et
tout cela pour tout mon script.
Je m'explique, ce que je voudrais c'est pouvoir v=E9rifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt. Donc il me faudrais
pour chaque ligne du script en entr=E9e mettre (ou afficher) le nombre
de caract=E8re.
ceci me permettrais de v=E9rifier la fonctionnalit=E9e du script.
Ce que =E0 quoi je pensais, c'est peut-=EAtre un sed =E0 l'enver (qui
enl=E8ve tous les autres caract=E8re que celui voulu).

Merci d'avance.

10 réponses

1 2
Avatar
mdnews

Je n'arrive pas à faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caractère dans une ligne et
tout cela pour tout mon script.

Je m'explique, ce que je voudrais c'est pouvoir vérifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt. Donc il me faudrais
pour chaque ligne du script en entrée mettre (ou afficher) le nombre
de caractère.


Plus simple: Pour chaque ligne compte le nombre d'itération de "`" et
divise par 2. Si le résultat donne un entier, c'est bon.

Avatar
Pascal Bourguignon
writes:
Je n'arrive pas à faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caractère dans une ligne et
tout cela pour tout mon script.
Je m'explique, ce que je voudrais c'est pouvoir vérifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt. Donc il me faudrais
pour chaque ligne du script en entrée mettre (ou afficher) le nombre
de caractère.
ceci me permettrais de vérifier la fonctionnalitée du script.
Ce que à quoi je pensais, c'est peut-être un sed à l'enver (qui
enlève tous les autres caractère que celui voulu).


Si c'est à faire avec sed:


$ cat /tmp/quotes
noquote
noquote
noquote
deux'quote'
'quote'deux
deux'quote'deux
''
deux''quotes
une'quote
deux'''quotes
une'quote
'quote
quote'
'
''
'''
''''
'''''
trois'quotes'sur'une branche
trois'quotes"'"sur'une branche
trois'quotes'sur'une branche
cinq'''''quotes
cinq'quotes"'"qui'courraient'sur'herbe
cinq'quotes'qui'courraient'sur'herbe
cinq'quotes'qui'courraient'sur'herbe
cat > example <<'EOF'
Ceci est un exemple de donnée incluses dans le script.
L'arbre est grand.
EOF
Réellement seulement des paires de ''?
$ echo bad lines: $(sed -n -e "s/[^']*'[^']*'//g"
-e "s/^[^']*$//" -e "/'/=" < /tmp/quotes)
bad lines: 9 10 11 12 13 14 16 18 19 20 21 22 23 24 25 28

Mais comme mon exemple en donne quelques indice, le problème est
surement plus compliqué. Je ferais un petit scanner...

--
__Pascal Bourguignon__ http://www.informatimago.com/
Litter box not here.
You must have moved it again.
I'll poop in the sink.

Avatar
Stephane Chazelas
2005-07-5, 23:31(-07), :
Je n'arrive pas à faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caractère dans une ligne et
tout cela pour tout mon script.
Je m'explique, ce que je voudrais c'est pouvoir vérifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt. Donc il me faudrais
pour chaque ligne du script en entrée mettre (ou afficher) le nombre
de caractère.
ceci me permettrais de vérifier la fonctionnalitée du script.
Ce que à quoi je pensais, c'est peut-être un sed à l'enver (qui
enlève tous les autres caractère que celui voulu).



tr -cd '`12'

Enleve tout ce qui n'est pas saut de ligne ou backquote.

Note que:

var=`
basename -- "$var"
`

est parfaitement valide.

Tu peux aussi faire:

awk -F'`' '{printf "%2d|%sn", NF-1, $0}'

qui te donne le nombre de backquotes pour chaque ligne.

--
Stéphane

Avatar
ozzii23
Merci à tous, je crois que je vais pouvoir me débrouiller avec ça.
Merci encore.
Avatar
Paul Gaborit
À (at) 5 Jul 2005 23:31:06 -0700,
écrivait (wrote):
Je n'arrive pas à faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caractère dans une ligne et
tout cela pour tout mon script.
Je m'explique, ce que je voudrais c'est pouvoir vérifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt. Donc il me faudrais
pour chaque ligne du script en entrée mettre (ou afficher) le nombre
de caractère.



En Perl :

perl -F'`' -nae 'print "$.: ",@F-1,"n"' < fichier_a_verifier

Affiche le numéro de ligne suivi du nombre de ` présents sur cette ligne.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>

Avatar
Laurent Wacrenier
écrit:
Je n'arrive pas à faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caractère dans une ligne et
tout cela pour tout mon script.
Je m'explique, ce que je voudrais c'est pouvoir vérifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt.


Pour afficher les lignes avec un nombre impair de "`" :

awk -F` 'NF && NF%2 == 0 {print "ligne", NR, ":", $0}'

Avatar
Laurent Wacrenier
Paul Gaborit écrit:
En Perl :

perl -F'`' -nae 'print "$.: ",@F-1,"n"' < fichier_a_verifier


C'est plus simple comme ça :

perl -lne 'print "$.: ", tr/`//'

Avatar
SauronDeMordor
Paul Gaborit écrit:

En Perl :

perl -F'`' -nae 'print "$.: ",@F-1,"n"' < fichier_a_verifier



C'est plus simple comme ça :

perl -lne 'print "$.: ", tr/`//'


oui ou grep -c ' <file>


Avatar
Laurent Wacrenier
SauronDeMordor écrit:
perl -lne 'print "$.: ", tr/`//'


oui ou grep -c ' <file>


ça donne le nombre de lignes avec un « ' ».


Avatar
DoMinix
À (at) 5 Jul 2005 23:31:06 -0700,
écrivait (wrote):

Je n'arrive pas à faire un script qui me permet de compter (ou
afficher) le nombre de fois que j'ai un caractère dans une ligne et
tout cela pour tout mon script.
Je m'explique, ce que je voudrais c'est pouvoir vérifier que j'ai bien
un nombre pair de "`" dans mes lignes de mon scipt. Donc il me faudrais
pour chaque ligne du script en entrée mettre (ou afficher) le nombre
de caractère.




En Perl :

perl -F'`' -nae 'print "$.: ",@F-1,"n"' < fichier_a_verifier

Affiche le numéro de ligne suivi du nombre de ` présents sur cette ligne.



Paul, j'ai une alternative: :)

perl -lne '@t=/`/g;print "$.:".+@t if @t' < fichier

Affiche le numéro de ligne suivi du nombre de ` SI il y en a.

--
dominix


1 2