SED + addition calculation before substitution

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

et : Computer Hope → Bash shift builtin command

1 J'aime

Merci beaucoup @MicP :slight_smile:

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

Je fais un script .sh que je suis entrain d’écrire - je le met ici tiens :relaxed:.

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} :slight_smile:

Je cherche… heu… je sors :sweat_smile: avant que le bureau de « tabac » ferme :slight_smile: vive la montagne.

#!/bin/sh
…

Ce 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 :

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


…
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


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

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

…
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 :

man grep

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

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

Oui, ok, sûr !

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

oui le script est

oui

oui

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