Echapper les espaces script bash

Bonjour :slightly_smiling:

J’essaye de récupèrer une valeur provenant d’une page html via un script bash. La valeur html est de la forme TITRE=Mon titre n° 1

Avec bash j’utilise la forme suivante :

TITRE=${URL_WEB}
# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
TITRE="${TITRE%% *}"
TITRE="$(echo "${TITRE}" | head -n 1)"

Le résultat est “Mon” il manque le reste, donc je pense que les espaces me posent problème…

Comment faire pour échapper les espaces et récupèrer la chaine complete ?

Merci !

Tout simplement ?

Tout simplement ?

Non cela ne change rien…

Il faudrait que tu donne la ligne complète pour que l’on puisse t’aider, sinon la solution serait :

En sortant TITRE="${TITRE%% *}" et réaffectant la variable TITRE à une autre j’obtiens bien le résultat attendu :doh:
Je ne comprend pas pourquoi !

TITRE=${URL_WEB}
# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
#TITRE="${TITRE%% *}"
TITRE="$(echo "${TITRE}" | head -n 1)"
TitreTEST=${TITRE}

La page HTML renvoie TITRE=Mon titre n° 1

Je ne comprend pas ce que tu cherche à retirer avec :

Bonjour,

En fait j’ai utilisé la méthode donné ici : sed-et-remplacement-valeur-t35103.html#p355782

Une page HTML me renvoie plein de valeur du type :

DONNEE1=xyz
DONNEE2=1234
TITRE=azerty

Avec Bash je récupère le contenu de la page html avec w3m que je stocke dans la variable RECUP_WEB

RECUP_WEB=$(/usr/bin/w3m -dump http://monurl/mapage.php)

TITRE=${RECUP_WEB}
DONNEE1=${RECUP_WEB}

# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
TITRE="${TITRE%% *}"
TITRE="$(echo "${TITRE}" | head -n 1)"
# Affectation de la valeur DONNEE1
DONNEE1="${DONNEE1#*DONNEE1=}"
DONNEE1="${DONNEE1%% *}"
DONNEE1="$(echo "${DONNEE1}" | head -n 1)"

Est-ce que cela aide un peu plus à comprendre le problème?

Tu veux enlever les espaces en fin de valeur ?
Tu ne peux pas avec la méthode que tu utilise car ce n’est pas une expression régulière mais une expansion de chemin qui est utilisée.
Je suis bien en peine je ne peux pas te proposer plus simple que :

Non, je veux justement garder la chaine de texte entre les espaces :083

En fait si je fais ça en réaffectant ${TITRE} à $TitreTEST cela fonctionne :

TITRE=${URL_WEB}
# Affectation de la valeur TITRE
TITRE="${TITRE#*TITRE=}"
TITRE="$(echo "${TITRE}" | head -n 1)"
TitreTEST=${TITRE}

echo ${TITRETEST} => Mon titre n° 1

Par contre si je fais :

[code]TITRE=${URL_WEB}

Affectation de la valeur TITRE

TITRE="${TITRE#*TITRE=}“
TITRE=”${TITRE%% *}“
TITRE=”$(echo “${TITRE}” | head -n 1)"[/code]
echo ${TITRE} => Mon

La chaine est coupé après le premier espace :075

Je dois être à coté de mes pompes, ne pas avoir les yeux en face des trous. On va faire autrement :

[code]TITRE=${URL_WEB}

Affectation de la valeur TITRE

TITRE="${TITRE#*TITRE=}“
TITRE=”$(echo “${TITRE}” | head -n 1)"
TitreTEST=${TITRE}
echo “#${TitreTEST}#”[/code]
T’affiche quoi ?
En quoi cela pose un problème ?
Qu’est ce que tu voudrais obtenir ?

Idem, j’ai pas compris en quoi le post #2 ne résout rien

Tu as toujours intérêt à mettre des quotes autour des variables, dès lors que tu as la moindre suspicion d’un potentiel espace dans la valeur;

Bonjour,

@haleth
Non cela ne change rien quand j’utilise TITRE="${TITRE%% *}"

@MisterFreez
Entre temps j’ai réécrit un truc similaire a ton code, par contre quelqu’un peut il m’expliquer vraiment l’utilité et la fonction du TITRE="${TITRE%% *}"

Merci.

Bonjour,

Personne ne peut me donner une explication du TITRE="${TITRE%% *}" ?

Bon week !

phrase='Voici ma phrase' premier_mot_de_ma_phrase="${phrase%% * }"
?

Salut,

Oui je pense aussi comme toi…
Etant donné que j’avais le problème qu’après l’espace le texte suivant n’était pas récupéré, j’en déduis aussi que cela permet de récupérer le premier mot…

Salut,
Il faut changer IFS (Internal File separator) voir le man bash
mais mémoriser l’état avant et restituer après

SAVE_IFS=$IFS
IFS=’\n’
ton truc
IFS=$SAVE_IFS