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 23/08/2018, à 10:26

Link_Octree

Extraire une variable d'un fichier texte désordonné

Bonjour,

Je dispose d'un fichier texte assez désordonné qui comporte la variable suivante

data-preconnect-urls="une_url"

:

Je voudrais extraire le contenu se trouvant entre les deux guillemets mais je n'y parvient pas. J'ai essayé avec cut mais il supporte un seul charactère comme délimiteur. J'ai donc essayé de tricher avec sed en remplacant "data-preconnect-urls=" par un unique charactère que je ne pense pas trouver à d'autre endroits dans ce fichier, le sigle £ par exemple. Celà ne fonctionne toujours pas car sed détecte £ comme plusieurs charactères.

J'ai également fait plusieurs essais infructueux avec grep.

Auriez-vous une idée de comment je pourrais m'y prendre s'il vous plait? Idéalement j'aimerais comprendre le code afin de pouvoir l'adapter moi même tout seul à d'autres situations similaires.

Cordialement,

Hors ligne

#2 Le 23/08/2018, à 11:13

erresse

Re : Extraire une variable d'un fichier texte désordonné

Bonjour,
On doit pouvoir faire mieux et plus simple, mais comme ceci :

lig=$(grep data-preconnect-urls <ton_fichier>)
echo "${lig#*=}"

ça va te lister la valeur qui suit le signe =.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 23/08/2018, à 11:13

pingouinux

Re : Extraire une variable d'un fichier texte désordonné

Bonjour,
Tu peux essayer ceci :

sed -nr 's/.*\bdata-preconnect-urls="([^"]+)".*/\1/p' fichier

Hors ligne

#4 Le 23/08/2018, à 11:38

MicP

Re : Extraire une variable d'un fichier texte désordonné

Bonjour

Sans utiliser ni grep ni sed,
juste avec l'interpréteur de commande bash

michel@debg53sw:~/essais$ cat monFichierTexte.txt 
kjkjgghj="hgf"
data-preconnect-urls="https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616,https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645"
jhgjhg="jhg"
michel@debg53sw:~/essais$ 
michel@debg53sw:~/essais$ maregex='^data-preconnect-urls="(.*)"$'
michel@debg53sw:~/essais$ while read -r; do [[ $REPLY =~ $maregex ]] && echo ${BASH_REMATCH[1]}; done < monFichierTexte.txt
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616,https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645
michel@debg53sw:~/essais$ 
michel@debg53sw:~/essais$ maregex='^data-preconnect-urls="(.*),(.*)"$'
michel@debg53sw:~/essais$ while read -r; do [[ $REPLY =~ $maregex ]] && echo -e "${BASH_REMATCH[1]}\n${BASH_REMATCH[2]}"; done < monFichierTexte.txt
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645
michel@debg53sw:~/essais$ 

=======

Link_Octree a écrit :

…Idéalement j'aimerais comprendre le code afin de pouvoir l'adapter moi même tout seul à d'autres situations similaires.…

While condition; do quelquechose; done < monFichierTexte.txt

monFichierTexte.txt est envoyé par la redirection < à l'entrée de la boucle While
qui va, par la fonction read lire chaque ligne du fichier monFichierTexte.txt
pour l'affecter à la variable REPLY et faire avec ce qui est entre do et done
jusqu'à ce qu'il n'y ait plus aucune ligne du fichier monFichierTexte.txt à lire.


read -r <=> Dans chaque ligne lue, aucun caractère ne sera interprété, même pas les caractères d'échappement \

REPLY   <=> La fonction read créé elle même la variable REPLY dans laquelle il y aura chaque ligne lue.

=~      <=> Va appliquer la regex sur la chaîne de caractères

echo -e <=> Les caractères d'échappement seront interprétés => /n sera interprété comme un retour à la ligne suivante.


maregex :

()      <=> La suite de caractères qui est entre parenthèses sera affecté à un élément du tableau BASH_REMATCH

.       <=> N'importe quel caractère

.*      <=> 0, 1 ou plusieurs occurrences de n'importe quel caractère

^       <=> Le caractère suivant sera le premier de la chaîne de caractères

$       <=> Le caractère précédent sera le dernier caractère de la chaîne de caractères

Dernière modification par MicP (Le 24/08/2018, à 20:50)

Hors ligne

#5 Le 24/08/2018, à 14:28

Link_Octree

Re : Extraire une variable d'un fichier texte désordonné

pingouinux a écrit :

Bonjour,
Tu peux essayer ceci :

sed -nr 's/.*\bdata-preconnect-urls="([^"]+)".*/\1/p' fichier

Ton code me semble le plus simple, serait-il possible de l'adapter pour couvrir les cas cette variable apparait plusieurs fois dans mon fichier, avec plusieurs URL différentes? Merci beaucoup!

Hors ligne

#6 Le 24/08/2018, à 14:42

MicP

Re : Extraire une variable d'un fichier texte désordonné

…les cas cette variable apparait plusieurs fois dans mon fichier, avec plusieurs URL différentes…

À moins qu'il y ait dans ta question un implicite qui m'échappe totalement,
la ligne de commande sed proposée par pingouinux  (tout comme mes propositions)
prends en compte les cas dans lesquels cette variable apparaîtrait plusieurs fois dans ton fichier, avec plusieurs URL différentes.

michel@debg53sw:~/essais$ cat tonFichierTexte.txt 
kjkjgghj="hgf"
data-preconnect-urls="https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616,https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645"
jhgjhg="jhg"
data-preconnect-urls="https://forum.ubuntu-fr.org/,http://wiki.bash-hackers.org/"
reze="ytrytr"
michel@debg53sw:~/essais$ 
michel@debg53sw:~/essais$ sed -nr 's/.*\bdata-preconnect-urls="([^"]+)".*/\1/p' tonFichierTexte.txt 
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616,https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645
https://forum.ubuntu-fr.org/,http://wiki.bash-hackers.org/
michel@debg53sw:~/essais$ 
michel@debg53sw:~/essais$ maregex='^data-preconnect-urls="(.*)"$'
michel@debg53sw:~/essais$ while read -r; do [[ $REPLY =~ $maregex ]] && echo ${BASH_REMATCH[1]}; done < tonFichierTexte.txt
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616,https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645
https://forum.ubuntu-fr.org/,http://wiki.bash-hackers.org/
michel@debg53sw:~/essais$ 
michel@debg53sw:~/essais$ maregex='^data-preconnect-urls="(.*),(.*)"$'
michel@debg53sw:~/essais$ while read -r; do [[ $REPLY =~ $maregex ]] && echo -e "${BASH_REMATCH[1]}\n${BASH_REMATCH[2]}"; done < tonFichierTexte.txt
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958616#p21958616
https://forum.ubuntu-fr.org/viewtopic.php?pid=21958645#p21958645
https://forum.ubuntu-fr.org/
http://wiki.bash-hackers.org/
michel@debg53sw:~/essais$ 

Dernière modification par MicP (Le 24/08/2018, à 15:20)

Hors ligne

#7 Le 24/08/2018, à 18:54

pingouinux

Re : Extraire une variable d'un fichier texte désordonné

Link_Octree #5 a écrit :

serait-il possible de l'adapter pour couvrir les cas cette variable apparait plusieurs fois dans mon fichier, avec plusieurs URL différentes?

C'est déjà le cas, sauf si la variable apparaît plusieurs fois sur une même ligne.

Ajouté : Pour tout récupérer

grep -Po '(?<=\bdata-preconnect-urls=")[^"]+(?=")' fichier

Dernière modification par pingouinux (Le 24/08/2018, à 20:36)

Hors ligne