# Wc --chars : false result?

**URL:** <https://www.debian-fr.org/t/wc-chars-false-result/90324>\
**Category:** Programmation\
**Created:** [Septembre 12, 2024, 1:39 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324 "2024-09-12T13:39:56Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Septembre 12, 2024, 1:39 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/1 "2024-09-12T13:39:56Z")

</div>

Pour quelle raison «&nbsp;`wc -m`&nbsp;» me retourne un FAUX résultat ?

```auto
echo "<p>123</p>" | wc -m
11

```

Romain

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 12, 2024, 2:07 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/2 "2024-09-12T14:07:16Z")

</div>

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) 😉

```auto
# printf "<p>123</p>" | wc -m
10

```

Car `echo` ajoute un retour à la ligne.

```auto
# printf "<p>123</p>"
<p>123</p>root@me:~#
root@me:~# echo "<p>123</p>"
<p>123</p>
root@me:~#

```

---

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Septembre 12, 2024, 2:11 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/3 "2024-09-12T14:11:49Z")

</div>

> [@Zargos](#):
>
> Bonjour,  
> C’est normal:

Pas normal.

> [@Zargos](#):
>
> 3 caractères pour le tag entrant, 4 pour le sortant =\> 7

oUais.

> [@Zargos](#):
>
> 3 caractère hors tags.

Un deux trois caractères.

> [@Zargos](#):
>
> 1 caractère de fin de ligne (retour à la ligne) 😉

Lequel ?

> [@Zargos](#):
>
> (retour à la ligne) 😉

Celui-ci ?

- `\r`= 2 caractères

portant non.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 12, 2024, 2:20 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/4 "2024-09-12T14:20:56Z")

</div>

Ben si echo ajoute un caractère de fin de ligne.  
Facile à prouver d’ailleurs:

```auto
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

---

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Septembre 12, 2024, 2:30 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/5 "2024-09-12T14:30:57Z")

</div>

> [@Zargos](#):
>
> ```auto
> # printf "<p>123</p>" | wc -m
> 10
> 
> ```

OK.. Merci @Zargos

Sinon :

```auto
echo -n "<p>123</p>" | wc -m
10

```

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 12, 2024, 2:41 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/6 "2024-09-12T14:41:30Z")

</div>

> [@anon36725218](#):
>
> ```auto
> echo -n "<p>123</p>" | wc -m
> 10
> 
> ```

Oui car l’option -n indique à echo de ne pas effectuer de saut de ligne final 🙂

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Septembre 12, 2024, 5:23 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/7 "2024-09-12T17:23:44Z")

</div>

Pour info, wc n’est quand-même pas très élégant pour compter les caractères d’une chaîne, puisqu’inutile !

```auto
var='<p>123</p>'

echo ${#var}
10

awk '{print length}' <<<"$var"
10

```

---

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Septembre 12, 2024, 6:40 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/8 "2024-09-12T18:40:17Z")

</div>

Ok Ok @Verner 😃

> [@Verner](#):
>
> ```auto
> awk '{print length}' <<<"$var"
> 10
> 
> ```

Je l’aime bien celle-ci ; parce que je me demandais «&nbsp;un truc&nbsp;» 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 «&nbsp;| bc&nbsp;» quelque part – au cas où il y ait des demi-caractère…

😅 🤣

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Septembre 12, 2024, 7:05 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/9 "2024-09-12T19:05:08Z")

</div>

> [@anon36725218](#):
>
> total de caractères de `<p>123</p>` - moins 1

```auto
echo $((${#var}-1))
9

```

---

<div class="post-metadata">

**Author:** ![anon36725218](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8e8cbc/32.png) [@anon36725218](https://www.debian-fr.org/u/anon36725218)\
**Post date:** [Septembre 12, 2024, 8:18 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/10 "2024-09-12T20:18:01Z")

</div>

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 😃

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Septembre 12, 2024, 8:43 UTC](https://www.debian-fr.org/t/wc-chars-false-result/90324/11 "2024-09-12T20:43:57Z")

</div>

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.
