Extraire des caractères d'une variable avec des *

Résolu/Fermé
tbeghain - 26 mai 2021 à 15:29
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 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
A voir également:

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 28 mai 2021 à 23:33
Bonjour,

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
grep
dans une boucle
for
en 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
1
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
fichier 
fic1 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
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
31 mai 2021 à 19:58
Merci pour ton retour, bonne continuation
0