Extraire des caractères d'une variable avec des *
Résolu/Fermé
tbeghain
-
26 mai 2021 à 15:29
mamiemando Messages postés 33574 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mars 2025 - 31 mai 2021 à 19:58
mamiemando Messages postés 33574 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mars 2025 - 31 mai 2021 à 19:58
Bonjour,
Je lis un fichier et j'ai des lignes qui commencent par * . Or, je voudrais extraire de ces lignes le premier caractère pour l'analyser.
J'utilise la commande PREM=`expr substr $Z1 1 1`
mais comme Z1 contient des *, j'ai l'erreur :
expr: erreur de syntaxe
Comment je fais pour avoir dans la variable $PREM le premier caractère de chaque ligne ?
Merci
Je lis un fichier et j'ai des lignes qui commencent par * . Or, je voudrais extraire de ces lignes le premier caractère pour l'analyser.
J'utilise la commande PREM=`expr substr $Z1 1 1`
mais comme Z1 contient des *, j'ai l'erreur :
expr: erreur de syntaxe
Comment je fais pour avoir dans la variable $PREM le premier caractère de chaque ligne ?
Merci
A voir également:
- Extraire des caractères d'une variable avec des *
- Extraire une video youtube - Guide
- Caractères ascii - Guide
- Extraire son d'une video - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux clavier azerty - Guide
2 réponses
mamiemando
Messages postés
33574
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mars 2025
7 833
Modifié le 28 mai 2021 à 23:33
Modifié le 28 mai 2021 à 23:33
Bonjour,
Pour extraire les lignes qui commencent (
Il faudrait nous en dire un peu plus sur le traitement que tu souhaites faire, mais dans ton script tu peux au pire itérer sur les lignes ainsi extraites en injectant le résultat de cette commande
Bonne chance
Pour extraire les lignes qui commencent (
^en expression rationnelle) par le caractère * (
[*]en expression rationnelle), il suffit de lancer :
grep "^[*]" fichier.txt
Il faudrait nous en dire un peu plus sur le traitement que tu souhaites faire, mais dans ton script tu peux au pire itérer sur les lignes ainsi extraites en injectant le résultat de cette commande
grepdans une boucle
foren t'inspirant de la lecture d'un fichier ligne par ligne.
#!/bin/sh file="fichier.txt" grep "^[*]" "$file" | while IFS= read -r line; do echo "$line" done
Bonne chance
Bonjour et merci pour la réponse.
En fait, dans un fichier, je cherchais à repérer les lignes qui commencent par une étoile car la ligne que je veux analyser est juste après. Donc, en gros, je lis ligne après ligne, et lorsque je repère une ligne qui commence par une étoile, je sais que la ligne suivante, je dois l'analyser.
En demandant à gauche à droite, on m'a fourni la solution, et la voici au cas où ça pourrait intéresser d'autres personnes. Il y a surement d'autres solutions, peut être plus efficaces, mais celle ci fonctionne :
Donc, j'ai ce
arg1 arg2 arg3
... et mon script shell a à peu près cette gueule là :
NB : Ce qui ne fonctionnait pas, c'étaient les commandes suivantes :
Voilà, et en tous cas, merci pour votre réponse
En fait, dans un fichier, je cherchais à repérer les lignes qui commencent par une étoile car la ligne que je veux analyser est juste après. Donc, en gros, je lis ligne après ligne, et lorsque je repère une ligne qui commence par une étoile, je sais que la ligne suivante, je dois l'analyser.
En demandant à gauche à droite, on m'a fourni la solution, et la voici au cas où ça pourrait intéresser d'autres personnes. Il y a surement d'autres solutions, peut être plus efficaces, mais celle ci fonctionne :
Donc, j'ai ce
fichierfic1 qui contient, entre autres, les lignes suivantes :
- blabla bla bla
arg1 arg2 arg3
... et mon script shell a à peu près cette gueule là :
FLAG="0" while read z1 do PREM=$(echo | awk '{ print substr("'"${Z1}"'",1,1)}') # echo PREM=$PREM if [[ $FLAG = "1" ]] ; then FLAG="0" --- --traitement de la ligne --- else if [[ $PREM = '*' ]] ; then FLAG="1" fi fi done < fic1
NB : Ce qui ne fonctionnait pas, c'étaient les commandes suivantes :
#PREM=`expr substr $Z1 1 1` #PREM=${Z1:1:1}
Voilà, et en tous cas, merci pour votre réponse
mamiemando
Messages postés
33574
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mars 2025
7 833
31 mai 2021 à 19:58
31 mai 2021 à 19:58
Merci pour ton retour, bonne continuation