#1 Le 24/09/2014, à 14:17
- Yoannjap
Bash : comment trouver deux occurences avec sed -n ?
Bonjour les aideurs
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