#26 Le 30/04/2024, à 08:33
- kaleo
Re : [Résolu] extraire une chaîne variable dans une ligne
Bonjour
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, à 08:35)
Hors ligne
#27 Le 30/04/2024, à 12: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, à 13:36
- kaleo
Re : [Résolu] extraire une chaîne variable dans une ligne
merci
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, à 21: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, à 21:43)
Hors ligne