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.

#26 Le 30/04/2024, à 09:33

kaleo

Re : [Résolu] extraire une chaîne variable dans une ligne

Bonjour smile

Merci pour " l'option 'E' "

J'ai utilisé chatgpt pour expliquer les commandes.

Cependant ses réponses ne sont pas cohérentes pour :

([^,]*)
\([^\<]*\)

( ou \( et ) ou \) encadrent le motif nommé \1 plus loin dans la commande
[ et ] servent à encadrer une chaîne entre ^ et , entre ^ et < ?
^ correspond à un début de ligne en général ?
*  correspond à tous les caractères dans [ ]  entre ^ et , ou < ?

Dernière modification par kaleo (Le 30/04/2024, à 09:35)

Hors ligne

#27 Le 30/04/2024, à 13:03

Watael

Re : [Résolu] extraire une chaîne variable dans une ligne

dans ce contexte (entre crochets), l'accent circonflexe indique une négation, et avec l'astérisque, ça voudrait dire : "tant que le caractère n'est pas celui indiqué".
si je me souviens bien.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#28 Le 30/04/2024, à 14:36

kaleo

Re : [Résolu] extraire une chaîne variable dans une ligne

merci smile

Bizarrement chatgpt me répond cette fois-ci correctement sur le sujet : [^,]*

Cela dépend peut-être de la formulation de ma question

Hors ligne

#29 Le 30/04/2024, à 22:28

kaleo

Re : [Résolu] extraire une chaîne variable dans une ligne

J'ai adapté deux des précédentes commandes pour extraire un deuxième mot situé entre "<br>Host visible name: " et "<br>Hostgroups:"

$ sed -En 's/.*<br>Host visible name: (.*)<br>Hostgroups:.*/\1/p' description.txt
COCO_SKO_KDQLHDC1DCD01_SDF6T546-3V65-8F48-B8C5-S5DCZ05Q6GH3
COCO_SKO_PSKOLMD1DSQ01_658DVS56-8R75-76A5-45ND-45FF4154135D
COCO_SKO_KDQLHDC1DCD01_SDF6T546-3V65-8F48-B8C5-S5DCZ05Q6GH3
COCO_SKO_PSKOLMD1DSQ01_658DVS56-8R75-76A5-45ND-45FF4154135D
kfughdfv32i
lmdfvncjf36a
keoinfsgf02p
hdfgdfgx84p
fgdfgbbb58p
$ sed -n '/visible/s/.*>Host visible name: \([^\<]*\).*/\1/p' description.txt
COCO_SKO_KDQLHDC1DCD01_SDF6T546-3V65-8F48-B8C5-S5DCZ05Q6GH3
COCO_SKO_PSKOLMD1DSQ01_658DVS56-8R75-76A5-45ND-45FF4154135D
COCO_SKO_KDQLHDC1DCD01_SDF6T546-3V65-8F48-B8C5-S5DCZ05Q6GH3
COCO_SKO_PSKOLMD1DSQ01_658DVS56-8R75-76A5-45ND-45FF4154135D
kfughdfv32i
lmdfvncjf36a
keoinfsgf02p
hdfgdfgx84p
fgdfgbbb58p

J'ai transformé le script de mon premier message.
Le nouveau script s'appelle test1.sh.

#!/bin/bash

# Vérification du nombre d'arguments
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <fichier_entree> <fichier_sortie>"
    exit 1
fi

# Chemin vers le fichier d'entrée
input_file="$1"

# Chemin vers le fichier de sortie
output_file="$2"

# Motifs à rechercher
start_pattern="<br>Host visible name: "
#end_pattern="<br>Hostgroups:"

# Extraction des lignes entre les motifs
#sed -n "/$start_pattern/,/$end_pattern/p" "$input_file" > "$output_file"

sed -n "/visible/s/.*$start_pattern\([^\<]*\).*/\1/p" "$input_file" > "$output_file"

echo "Les lignes ont été extraites dans $output_file."
$ ./test1.sh
Usage: ./test1.sh <fichier_entree> <fichier_sortie>
$ ./test1.sh description.txt lignes_extraites.txt
Les lignes ont été extraites dans lignes_extraites.txt.
COCO_SKO_KDQLHDC1DCD01_SDF6T546-3V65-8F48-B8C5-S5DCZ05Q6GH3
COCO_SKO_PSKOLMD1DSQ01_658DVS56-8R75-76A5-45ND-45FF4154135D
COCO_SKO_KDQLHDC1DCD01_SDF6T546-3V65-8F48-B8C5-S5DCZ05Q6GH3
COCO_SKO_PSKOLMD1DSQ01_658DVS56-8R75-76A5-45ND-45FF4154135D
kfughdfv32i
lmdfvncjf36a
keoinfsgf02p
hdfgdfgx84p
fgdfgbbb58p

Dernière modification par kaleo (Le 30/04/2024, à 22:43)

Hors ligne