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...

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top