OVH Cloud OVH Cloud

SED

1 réponse
Avatar
vguignot
Bonjour,

Je cherche a lancer une commande sed pour changer la valeur d'un item dans
un fichier.

sed -e "s/item/new_item/" mon_fichier
Ca, ça fonctionne impec. Là ou ça se complique c'est que item et new_item
sont variables et dépendent de :

item : cat fichier_item | grep famille | awk '{print $position}'
et new_item idem mais avec un autre fichier :
new_item : cat fichier_new_item | grep new_famille | awk '{print $position}'

Toutes mes commandes tournent correctement séparement sous kornshell (sous
W2K).

Maintenant j'aimerais lancer tout ceci d'un seul coup mais je ne sais pas
comment faire. J'ai essayé des | (pipes) mais ça ne fonctionne pas.

Je voudrais un truc de ce genre sed -e "s/{cat fichier_item | grep famille |
awk '{print $position}'}/cat fichier_new_item | grep new_famille | awk
'{print $position}'/" mon fichier

Est ce que c'est possible ?

Merci d'avance
20.100

1 réponse

Avatar
Stephane CHAZELAS
Le Wed, 9 Jul 2003 16:55:14 +0200, vguignot écrivait :
[...]
sed -e "s/item/new_item/" mon_fichier
Ca, ça fonctionne impec. Là ou ça se complique c'est que item et new_item
sont variables et dépendent de :

item : cat fichier_item | grep famille | awk '{print $position}'


cat ne sert à rien. grep non plus puisque awk peut faire son
boulot.

item=$(awk -v position=2 '
/famille/{print $position; exit}' < fichier_item)
new_item=$(awk -v position=2 '
/famille/{print $position; exit}' < fichier_new_item)

sed "s/$item/$new_item/g" < mon_fichier

Mais attention, il ne faut pas que $item contiennent des
caractères spéciaux à sed (.^$/*[) et (&/) pour $new_item

--
Stéphane