if [ $# -ne 4 ]
then
echo "Usage: ${0##*/} label destination source1 source2" >&2
echo "Copy 'source1' into 'destination', if 'label' is a line of source1
then 'label' is replaced by the content of 'source2'" >&2
exit 1
fi
exec 0< "$3"
echo -n "" > "$2"
while read i
do
if [ "$i" = "$1" ]
then
cat "$4" >> "$2"
else
echo "$i" >> "$2"
fi
done
Il permet de remplacer une ligne 'label' d'un fichier 'source1' par le
contenu du fichier 'source2' et mets le résultat dans 'destination'
Le premier problème : il ne conserve pas les blancs devants les lignes (mais
bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("test\n"); en
printf("testn"); et je ne vois pas trop pourquoi !
Merci d'avance.
Nicolas.
PS: Je ne sais pas si c'est HS ici (mais ce script me permet quand même de
configurer à logiciel à compiler alors pourquoi pas ? ;) et puis ce forum
et tres réactif alors pourquoi s'en priver ? )
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
lhabert
nico :
echo -n "" > "$2"
Tu peux faire « : > "$2" », c'est plus portable. En fait, tu peux carrément faire « exec > "$2" », et ensuite tu n'as plus aucune redirection à faire.
Le premier problème : il ne conserve pas les blancs devants les lignes (mais bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("testn"); en printf("testn"); et je ne vois pas trop pourquoi !
read parse son entrée de deux manières : - il splitte en champs sur les caractères contenus dans la variable IFS - sauf quand ils sont précédés d'un « », qui permet de quoter (et les fins de lignes aussi).
Pour le première problème, il faut donc faire un « IFS= », et pour le second, il faut donner l'option « -r » à read.
nico :
echo -n "" > "$2"
Tu peux faire « : > "$2" », c'est plus portable. En fait, tu peux carrément
faire « exec > "$2" », et ensuite tu n'as plus aucune redirection à faire.
Le premier problème : il ne conserve pas les blancs devants les lignes (mais
bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("testn"); en
printf("testn"); et je ne vois pas trop pourquoi !
read parse son entrée de deux manières :
- il splitte en champs sur les caractères contenus dans la variable IFS
- sauf quand ils sont précédés d'un « », qui permet de quoter (et les fins
de lignes aussi).
Pour le première problème, il faut donc faire un « IFS= », et pour le
second, il faut donner l'option « -r » à read.
Tu peux faire « : > "$2" », c'est plus portable. En fait, tu peux carrément faire « exec > "$2" », et ensuite tu n'as plus aucune redirection à faire.
Le premier problème : il ne conserve pas les blancs devants les lignes (mais bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("testn"); en printf("testn"); et je ne vois pas trop pourquoi !
read parse son entrée de deux manières : - il splitte en champs sur les caractères contenus dans la variable IFS - sauf quand ils sont précédés d'un « », qui permet de quoter (et les fins de lignes aussi).
Pour le première problème, il faut donc faire un « IFS= », et pour le second, il faut donner l'option « -r » à read.
nico
Luc Habert wrote:
nico :
echo -n "" > "$2"
Tu peux faire « : > "$2" », c'est plus portable. En fait, tu peux carrément faire « exec > "$2" », et ensuite tu n'as plus aucune redirection à faire.
Je n'y vais pas pensé :/
Le premier problème : il ne conserve pas les blancs devants les lignes (mais bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("testn"); en printf("testn"); et je ne vois pas trop pourquoi !
read parse son entrée de deux manières : - il splitte en champs sur les caractères contenus dans la variable IFS - sauf quand ils sont précédés d'un « », qui permet de quoter (et les fins de lignes aussi).
Pour le première problème, il faut donc faire un « IFS= », et pour le second, il faut donner l'option « -r » à read.
Ok ca marche, merci beaucoup, je me souvenais plus que read séparait l'entrée en champs.
-- nico
Luc Habert wrote:
nico :
echo -n "" > "$2"
Tu peux faire « : > "$2" », c'est plus portable. En fait, tu peux
carrément faire « exec > "$2" », et ensuite tu n'as plus aucune
redirection à faire.
Je n'y vais pas pensé :/
Le premier problème : il ne conserve pas les blancs devants les lignes
(mais bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("testn");
en printf("testn"); et je ne vois pas trop pourquoi !
read parse son entrée de deux manières :
- il splitte en champs sur les caractères contenus dans la variable IFS
- sauf quand ils sont précédés d'un « », qui permet de quoter (et les
fins de lignes aussi).
Pour le première problème, il faut donc faire un « IFS= », et pour le
second, il faut donner l'option « -r » à read.
Ok ca marche, merci beaucoup, je me souvenais plus que read séparait
l'entrée en champs.
Tu peux faire « : > "$2" », c'est plus portable. En fait, tu peux carrément faire « exec > "$2" », et ensuite tu n'as plus aucune redirection à faire.
Je n'y vais pas pensé :/
Le premier problème : il ne conserve pas les blancs devants les lignes (mais bon c'est pas dramatique car je l'utilise pour des programme C)
Deuxième problème : il me transforme des lignes comme printf("testn"); en printf("testn"); et je ne vois pas trop pourquoi !
read parse son entrée de deux manières : - il splitte en champs sur les caractères contenus dans la variable IFS - sauf quand ils sont précédés d'un « », qui permet de quoter (et les fins de lignes aussi).
Pour le première problème, il faut donc faire un « IFS= », et pour le second, il faut donner l'option « -r » à read.
Ok ca marche, merci beaucoup, je me souvenais plus que read séparait l'entrée en champs.