Comment isoler le texte cité d’un fichier vers une variable shell ?
-
07-09-2020 - |
Question
Comment isoler le texte cité d’un fichier vers une variable shell ?
Aussi:comment ignorer les lignes commençant par '#'
?
Disons que j'ai le fichier texte
8723 "full name" "more data here" #5002 "another name" "bla bla bla" 7129 "single" blablabla 3910 noquote "bla bla bla"
et je veux écrire un script qui exécute
#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"
pour chaque ligne du fichier texte.
Si cela facilite les choses, vous pouvez supposer que FULLNAME et MOREDATA dans le fichier texte sont toujours entre guillemets, même lorsqu'ils sont composés d'un seul mot.
j'ai essayé le simple
#!/bin/sh
while read key name extra
do
echo "myscript $key \"$name\" -- \"$extra\""
#myscript $key "$name" "$extra"
done < list.txt
mais il ne regroupe pas la valeur entre guillemets dans une seule variable shell.
La sortie est
myscript 8723 ""full" -- "name" "more data here"" myscript #5002 ""another" -- "name" "bla bla bla"" myscript 7129 ""single"" -- "blablabla" myscript 3910 "noquote" -- ""bla bla bla""
Au lieu de cela, j'aimerais obtenir
myscript 8723 "full name" -- "more data here" myscript 7129 "single" -- "blablabla" myscript 3910 "noquote" -- "bla bla bla"
Bien sûr, je peux ajouter myscript
à chaque ligne du fichier texte original et faites de ce fichier un script ou écrivez un C
programme pour faire ça...
La solution
#!/bin/sh
while read key name extra
do
eval myscript $key $name $extra
done <(grep -v "^#" list.txt)
Autres conseils
sed -e '/^[^#]/s/^/myscript /' list.txt
MODIFIER:Pour l'exécuter :
sed -e '/^[^#]/s/^/myscript /' list.txt | bash