Pour quelle raison « wc -m
» me retourne un FAUX résultat ?
echo "<p>123</p>" | wc -m
11
Romain
Pour quelle raison « wc -m
» me retourne un FAUX résultat ?
echo "<p>123</p>" | wc -m
11
Romain
Bonjour,
C’est normal:
3 caractères pour le tag entrant, 4 pour le sortant => 7
3 caractère hors tags.
1 caractère de fin de ligne (retour à la ligne)
# printf "<p>123</p>" | wc -m
10
Car echo
ajoute un retour à la ligne.
# printf "<p>123</p>"
<p>123</p>root@me:~#
root@me:~# echo "<p>123</p>"
<p>123</p>
root@me:~#
Pas normal.
oUais.
Un deux trois caractères.
Lequel ?
Celui-ci ?
\r
= 2 caractèresportant non.
Ben si echo ajoute un caractère de fin de ligne.
Facile à prouver d’ailleurs:
echo "<p>123</p>" > texte1.txt
root@mephisto:~# cat -A texte1.txt
<p>123</p>$
root@mephisto:~# printf "<p>123</p>" > texte2.txt
root@mephisto:~# cat -A texte2.txt
<p>123</p>root@mephisto:~#
QED
Oui car l’option -n indique à echo de ne pas effectuer de saut de ligne final
Pour info, wc n’est quand-même pas très élégant pour compter les caractères d’une chaîne, puisqu’inutile !
var='<p>123</p>'
echo ${#var}
10
awk '{print length}' <<<"$var"
10
Ok Ok @Verner
Je l’aime bien celle-ci ; parce que je me demandais « un truc » tout à l’heure. Un truc trop compliqué à expliquer à l’écris – La question était : comment faire une soustraction. Le sujet : total de caractères de <p>123</p>
- moins 1 ^^ la galère. Je pensais à faire un « | bc » quelque part – au cas où il y ait des demi-caractère…
echo $((${#var}-1))
9
Je n’y arrivais pas :
N’importe quoi
çà doit être bon comme çà :
var='<p>123</p>' ; echo $((${#var}-1))
J’essaie ; super ! Attendez, je l’export cette variable
Donc ni besoin de wc, ni de bc : ça fait du ménage !
Bash (et zsh) savent déjà faire plein de choses par eux-mêmes.
En y rajoutant sed ou awk (installés par défaut), il n’y a besoin de rien d’autre pour traiter des chaînes de caractères, et ça reste la combinaison la plus efficace en temps de traitement.