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

Résolu
tbeghain -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  2. tbeghain
     
    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
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      Merci pour ton retour, bonne continuation
      0