Remplacement d 1 ligne ds un fichier

Résolu/Fermé
abiss - 3 avril 2008 à 08:38
 abiss - 3 avril 2008 à 18:07
Bonjour,
J'essaye d'écrire une fonction dans un script shell (ksh) qui remplace une partie d'une ligne par une autre. La ligne a remplacer commence par la chaine libdir= mais j'ai qques difficultés.
ma fonction prend en paramètre la nouvelle ligne et le fichier concerné.

replaceLine()
{
#cmd1
sed "s/\(^libdir=\)\(..*$\)/\1$1/" $2
#cmd2
sed 's/\(^libdir=\)\(..*$\)/\1$1/' $2
}


avec l'exécution de la cmd1 j'ai l'erreur suivante:
sed: -e expression #1, char 29: unknown option to `s'
Exit 1

avec l'exécution de la cmd2 le $1 n'est pas remplacé par son contenu mais utilisé comme tel:

Un autre point est que j'ai besoin du résultat dans le fichier passé en paramètre et non sur le stdin

Merci de votre aide
A voir également:

2 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 avril 2008 à 10:32
hello
le problème c'est les $ entre simples ou doubles quotes, essayer:

sed "s/\(^libdir=\)\(..*\$\)/\1$1/" $2

sed 's/\(^libdir=\)\(..*$\)/\1'"$1"'/' $2 
0
Salut,
j ai la même erreur avec les deux propositions:
sed: -e expression #1, char 27: unknown option to `s'
Exit 1
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 avril 2008 à 12:29
Salut,

Que contient ton paramètre "$1" ?
Sinon, la sous-expression "\(..*$\)" est inutile vu qu'apparemment elle cible tout le reste de la ligne, non ?
Essaye avec :
sed 's/^libdir=/&'"$1"'/' $2

0
Bonjour,
je fais l'appel à la fonction avec les parametres suivants:
replaceLine \'/usr/local/BerkeleyDB.4.5/lib\' /tmp/test.txt

Exp:
j ai par example la ligne suivante:
...
libdir='/usr/lib'
...

Je veux remplacer ce qui le path /usr/lib par /usr/local/BerkeleyDB.4.5/lib
libdir='/usr/local/BerkeleyDB.4.5/lib'

Sinon la commande que vous m'avez fournit génère l'erreur suivante:
sed: -e expression #1, char 16: unknown option to `s'
Exit 1

Cdl
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > abiss
3 avril 2008 à 17:37
Il faut changer le séparateur "/" dans la mesure ou il se trouve dans le motif de remplacement :
sed 's#^libdir=#&'"$1"'#' $2
de ce fait tu peux utiliser les quotes doubles (guillemets) :
sed "s#^libdir=#&$1#" $2
;-))
0
abiss > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
3 avril 2008 à 18:07
Merci beaucoup
0