# SED + addition calculation before substitution

**URL:** <https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174>\
**Category:** Programmation\
**Created:** [Septembre 23, 2022, 3:09 UTC](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174 "2022-09-23T15:09:28Z")\
**Posts on this page:** 5\
**Page:** 2

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 26, 2022, 2:55 UTC](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174/22 "2022-09-26T14:55:27Z")

</div>

> [@anon36725218](#):
>
> …  
> `Est-ce obligé de faire une boucle et un switch -> case ? Et cela sur (tous) le nombres d'arguments envoyé ?`  
> …

On peut utiliser la commande interne `shift`

Voir la page du manuel de `bash` concernant la commande `shift`  
en lançant la ligne de commandes suivante :  
`man --pager='less -p "shift \["' bash`

Voir aussi : [Bash Guide for Beginners → 9.7. The shift built-in](https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_07.html)

et : [Computer Hope → Bash shift builtin command](https://www.computerhope.com/unix/bash/shift.htm)

---

<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 26, 2022, 3:23 UTC](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174/24 "2022-09-26T15:23:00Z")

</div>

Merci beaucoup @anon29980398 🙂

---

<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 26, 2022, 3:46 UTC](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174/25 "2022-09-26T15:46:39Z")

</div>

> [@anon29980398](#):
>
> ```auto
> michel@deb114x:~$ val=20210923000001
> michel@deb114x:~$ echo ${val:8}
> 000001
> michel@deb114x:~$
> 
> ```

Tiens, tu m’as bien dis que c’était en BASH petit·e malin·e 🙂

Je fais un script `.sh` que je suis entrain d’écrire - je le met [ici](https://www.debian-fr.org/t/dane-dnssec-signatures-valid-or-not-valid/86932/8) tiens 😌.

Par exemple :

```
#!/bin/sh
SOA="20210923000001" | egrep -ho '[0-9]{8,}')
SERIAL_SOA="$(echo ${SOA:8})"

```

Me retourne une erreur sur les deux-points `:` de la variable → `${SOA:8}` 🙂

Je cherche… heu.. je sors 😅 avant que le bureau de «&nbsp;tabac&nbsp;» ferme 🙂 vive la montagne.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 26, 2022, 6:04 UTC](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174/26 "2022-09-26T18:04:38Z")

</div>

```nohighlight
#!/bin/sh
…

```

Ce [shebang](https://fr.wikipedia.org/wiki/Shebang) indique que ce script devra être interprété par le shell accessible par `/bin/sh`  
Le shell accessible par le fichier de type lien `/bin/sh` est :

```nohighlight
michel@deb114x:~$ readlink -f /bin/sh
/usr/bin/dash
michel@deb114x:~$

```

Donc, ce n’est pas le shell `bash` qui interprétera les lignes de commandes contenues dans ce script,  
mais le shell `dash`

* * *

```nohighlight
…
SOA="20210923000001" …

```

Il vaut mieux utiliser des caractères en lettre minuscules pour nommer les variables créées dans un script car ça permet de différencier plus facilement les variables crées dans et pour le script  
des variables d’environnement dont les noms sont en lettre majuscules

* * *

```nohighlight
…
SOA="20210923000001" | egrep -ho '[0-9]{8,}')
…

```

La parenthèse finale est sans doute une erreur de frappe.

```nohighlight
…
SOA="20210923000001" | egrep -ho '[0-9]{8,}'
…

```

Comme la commande d’affectation précédant la commande pipe `|` ne retourne aucune sortie,  
la commande pipe `|` ne retournera rien en entrée de la commande `egrep`  
donc, la commande `egrep` ne retournera rien non plus en sortie.

D’autre part, la commande `grep` est utilisée pour extraire des **lignes** d’un fichier texte

Voir :

```nohighlight
man grep

```

* * *

```nohighlight
soa="20210923000001"
serial_soa="$(echo ${soa:8})"

```

la syntaxe `${soa:8}` fonctionne avec l’interpréteur de commande `bash`  
mais elle ne fonctionnera pas avec l’interpréteur de commande `dash`

* * *

Avec le shell `bash`

Il n’est pas nécessaire d’utiliser la commande `echo` pour affecter à la variable nommée `serial_soa` la valeur correspondant aux derniers caractères qui suivent le 8ème caractère de la valeur qui aurait été affectée à la variable nommée `soa`

```nohighlight
michel@deb114x:~$ soa="20210923000001"
michel@deb114x:~$ serial_soa="${soa:8}"
michel@deb114x:~$ 
michel@deb114x:~$ echo "$serial_soa"
000001
michel@deb114x:~$ 

```

---

<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 26, 2022, 6:36 UTC](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174/27 "2022-09-26T18:36:35Z")

</div>

> [@anon29980398](#):
>
> ```auto
> #!/bin/sh
> …
> 
> ```
> 
> Ce [shebang](https://fr.wikipedia.org/wiki/Shebang) indique que ce script devra être interprété par le shell accessible par `/bin/sh`  
> Le shell accessible par le fichier de type lien `/bin/sh` est :
> 
> ```auto
> michel@deb114x:~$ readlink -f /bin/sh
> /usr/bin/dash
> michel@deb114x:~$
> 
> ```
> 
> Donc, ce n’est pas le shell `bash` qui interprétera les lignes de commandes contenues dans ce script,  
> mais le shell `dash`

Oui, ok, sûr !

> [@anon29980398](#):
>
> ```auto
> …
> SOA="20210923000001" …
> 
> ```
> 
> Il vaut mieux utiliser des caractères en lettre minuscules pour nommer les variables créées dans un script car ça permet de différencier plus facilement les variables crées dans et pour le script  
> des variables d’environnement dont les noms sont en lettre majuscules

Oui, bien… Ce n’est pas bête, c’est mieux… nous sommes Humain·e·s 😉

> [@anon29980398](#):
>
> ```auto
> …
> SOA="20210923000001" | egrep -ho '[0-9]{8,}')
> …
> 
> ```
> 
> La parenthèse finale est sans doute une erreur de frappe.
> 
> ```auto
> …
> SOA="20210923000001" | egrep -ho '[0-9]{8,}'
> …
> 
> ```
> 
> Comme la commande d’affectation précédant la commande pipe `|` ne retourne aucune sortie,  
> la commande pipe `|` ne retournera rien en entrée de la commande `egrep`  
> donc, la commande `egrep` ne retournera rien non plus en sortie.
> 
> D’autre part, la commande `grep` est utilisée pour extraire des **lignes** d’un fichier texte
> 
> Voir :
> 
> ```auto
> man grep
> 
> ```

oui le script est [là](https://www.debian-fr.org/t/dane-dnssec-signatures-valid-or-not-valid/86932/8)

> [@anon29980398](#):
>
> ```auto
> soa="20210923000001"
> serial_soa="$(echo ${soa:8})"
> 
> ```
> 
> la syntaxe `${soa:8}` fonctionne avec l’interpréteur de commande `bash`  
> mais elle ne fonctionnera pas avec l’interpréteur de commande `dash`

oui

> [@anon29980398](#):
>
> Avec le shell `bash`
> 
> Il n’est pas nécessaire d’utiliser la commande `echo` pour affecter à la variable nommée `serial_soa` la valeur correspondant aux derniers caractères qui suivent le 8ème caractère de la valeur qui aurait été affectée à la variable nommée `soa`
> 
> ```auto
> michel@deb114x:~$ soa="20210923000001"
> michel@deb114x:~$ serial_soa="${soa:8}"
> michel@deb114x:~$ 
> michel@deb114x:~$ echo "$serial_soa"
> 000001
> michel@deb114x:~$ 
> 
> ```

oui

Bon, bonne soirée 😃 à vous.tous.toutes !

[Page précédente](https://www.debian-fr.org/t/sed-addition-calculation-before-substitution/87174.md?page=1)
