Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/09/2014, à 14:17

Yoannjap

Bash : comment trouver deux occurences avec sed -n ?

Bonjour les aideurs smile

Mon niveau en programmation Bash est nouveau, donc il est très irrégulier.
Le script que je tente d'écrire sert à : m'afficher la prononciation en anglais britannique (ex. pour le mot "dilemma" : dɪˈlemə) d'un mot recherché.
Il fait ça à partir du site web d'Oxford dictionary (exemple avec le terme “albeit”)
Le plus souvent (pour la généralité des termes recherchés), il n'y a : qu'une seule prononciation en anglais britannique (et une seule en anglais américain, mais ce n'est pas ce qui m'intéresse).
Mais parfois, comme dans l'exemple du terme “dilemma”, il existe deux prononciations britanniques...

Le script que j'ai rédigé ci-dessous permet bien d'afficher la prononciation britannique du terme recherché, mais seulement la première (essayez avec le terme “dilemma”)

#!/bin/bash

mot=$1

url="http://www.oxfordlearnersdictionaries.com/definition/english/$1"
VAL2="."

pronuk1="`wget -q -O - $url | sed -n '/<span class="i" id="'$mot'__'$VAL2'">/p' | sed 's/.*<span class="i" id="'$mot'__'$VAL2'">//' | sed 's/<\/span>.*//' | sed 's/^[ \t]*//;s/[ \t]*$//' | sed '$!N; /^\(.*\)\n\1$/!P; D'`"

echo $pronuk1

Quelqu'un aurait-il une piste pour m'aider dans une modification du script qui permettrait d'afficher toutes (s'il y en a plusieurs) les prononciations en anglais britannique du terme recherché ?

Mes pistes, mais où mes recherches google et tutos ne portent pas leur fruit... Et est-ce que je vais chercher trop loin ?
    - Dire au script : « cherche-moi la prononciation de ceci. OK, tu as trouvé un premier résultat. Maintenant cherche s'il y a un autre résultat mais AILLEURS dans la page web (ne me réécrit pas la même prononciation deux fois ! ». En gros chercher plusieurs occurrences d'une même commande.
    - Demander au script de rechercher plusieurs fois ce que je lui demande, mais de sorte à ce que le nombre correspondant à la variable $VAL, dans l'expression

/<span class="i" id="'$MOT'__'$VAL'">

à rechercher, soit différent en fonction des recherches...


MERCI beaucoup pour votre aide les gens !

Hors ligne

#2 Le 24/09/2014, à 18:51

Yoannjap

Re : Bash : comment trouver deux occurences avec sed -n ?

OK, bon, après quelques efforts, je n’ai définitivement rien trouvé malgré moult recherches approfondies.

Alors j'ai un peu bidouillé et voilà un script qui (tant que les développeurs du site web ne changent pas son code html) marche à la perfection pour obtenir le codage en alphabet phonétique international des prononciations en anglais britannique de n'importe quel mot référencé par ce dictionnaire. Notez que pour un nom composé de plusieurs mots, dans le terminal il faut entrer la variable mot=$1 de cette façon :
    - tout en minuscule, même lorsqu'il s'agit d'un nom propre ;
    - lier les différents mot par un tiret-du-6 : -
Ex. : Pour “Franck Sinatra”, inscrire franck-sinatra, ou pour un nom commun comme “coffee maker”, inscrire coffee-maker.

Pour les rares que cela pourraient intéresser, voici le script :

#!/bin/bash

mot=$1

url="http://www.oxfordlearnersdictionaries.com/definition/english/$1"
VAL="." # le poitn équivaut à n'importe quel caractère (au moins un, ou plusieurs, espace compris). Et lorsque les chiffres d'une expressions régulière de page web varient, c'est mieux de pouvoir intégrer des caractères-mais-dont-on-ne-sait-pas-la-valeur	

unoudeux="`wget -q -O - $url`"

pronuk1="`wget -q -O - $url | sed -n -e '/gb_1.mp3/p' | sed 's/.*<span class="i" id="'$mot'__'$VAL'">//' | sed 's/<\/span>.*//' | sed 's/^[ \t]*//;s/[ \t]*$//' | sed '$!N; /^\(.*\)\n\1$/!P; D'`"
VAL2="`wget -q -O - $url | sed -n -e '/gb_2.mp3/p' | sed 's/.*<span class="i" id="'$mot'__//' | sed 's/">.*//' | sed 's/^[ \t]*//;s/[ \t]*$//' | sed '$!N; /^\(.*\)\n\1$/!P; D'`" # [^ ][^ ]* veut dire tous les caractères possibles (quelqu'en soient le nombre) entourés par ce qui est écrit avant et après :)
pronuk2="`wget -q -O - $url | sed -n -e '/gb_2.mp3/p' | sed 's/.*<span class="i" id="'$mot'__'$VAL2'">//' | sed 's/<\/span> <div class="sound audio_play_button pron-uk icon-audio" data-src-mp3="http:\/\/www.oxfordlearnersdictionaries.com\/media\/english\/uk_pron\/[^ ][^ ]*__gb_2.mp3.*//' | sed 's/^[ \t]*//;s/[ \t]*$//' | sed '$!N; /^\(.*\)\n\1$/!P; D'`"

if [[ $unoudeux = *"gb_2.mp3"* ]]
then
	echo -e $(tput smul)"Prononciations britannique du mot “$mot” :\n"$(tput sgr 0)$(tput setaf 3)$pronuk1$(tput sgr 0) \/ $(tput setaf 2)$pronuk2$(tput sgr 0)
else
	echo -e $(tput smul)"Prononciation britannique du mot “$mot” :\n"$(tput sgr 0)$(tput setaf 3)$pronuk1$(tput sgr 0)
fi

Hors ligne