OVH Cloud OVH Cloud

remplacement de ligne avec sed

7 réponses
Avatar
Kevin Denis
Bonjour,

Je cherche a remplacer une ligne dans un fichier.

Le fichier est de la forme
------------
#des commentaires
(... un certain nombre de ligne dont le nombre peut changer au cours
du temps...)

#un commentaire dans lequel j'ai mis un motif reperable: 1234567890
(un_nom) (un_autre_nom) (un_autre_nom)
(un) (deux) (trois)
(a) (b) (c)

(... d'autres lignes ...)
-------------

Je peux trouver facilement le numero de ligne grace au motif reperable (il
est unique et ne sert qu'a ca):

sed -n -e '/1234567890/=' < fichier

Maintenant, je veux modifier la ligne qui suit le motif, ou la deuxieme
ligne apres le motif, ou la enieme ligne (Je ne connais pas obligatoirement
par avance le contenu de cette ligne a modifier).

Par exemple, modifier le
(un) (deux) (trois)
par
(houba) (houba) (hop)

Si le (un) (deux) (trois) est en douzieme ligne, un simple

sed -e '12d' < fichier | sed -e '12a(houba) (houba) (hop)' > fichier.nouveau

Fait l'affaire

Mais comment modifier une ligne selon une variable?

Merci

PS: awk serait il plus approprie dans ce cas?
--
Kevin

7 réponses

Avatar
Dam
C'est un peu bourrin mais :

num=`grep -n 25 test_anr1_pers.sh | cut -d: -f1 | head -n 1`;num=`expr
$num + 1`;sed -e '$numd' < fichier | sed -e '$numa(houba) (houba)
(hop)' > fichier.nouveau

Qu'en penses-tu?
Avatar
Dam
C'est un peu bourrin mais :

num=`grep -n 1234567890 fichier | cut -d: -f1 | head -n 1`;num=`expr
$num + 1`;sed -e '$numd' < fichier | sed -e '$numa(houba) (houba)
(hop)' > fichier.nouveau

Qu'en penses-tu?
Avatar
Dam
C'est un peu bourrin mais :


num=`grep -n 1234567890 fichier | cut -d: -f1 | head -n 1`;num=`expr
$num + 1`; sed -e '$nums/(un) (deux) (trois)/(houba) (houba)
(hop)/' fichier > fichier.nouveau


Qu'en penses-tu?
Avatar
Stephane Chazelas
2005-08-3, 06:10(-07), Dam:
C'est un peu bourrin mais :

num=`grep -n 1234567890 fichier | cut -d: -f1 | head -n 1`;num=`expr
$num + 1`;sed -e '$numd' < fichier | sed -e '$numa(houba) (houba)
(hop)' > fichier.nouveau
[...]


Ca peut s'ecrire:

sed '
/1234567890/,$!b
n
s/.*/(houba) (houba)/
:1
n
b1' < fichier > fichier.nouveau


--
Stéphane

Avatar
Kevin Denis
Le 03-08-2005, Stephane Chazelas a écrit :

Ca peut s'ecrire:

sed '
/1234567890/,$!b
n
s/.*/(houba) (houba)/
:1
n
b1' < fichier > fichier.nouveau

Parfait, avec le nombre de 'n' je peux modifier la ligne souhaitee.

Merci beaucoup

--
Kevin

Avatar
Kevin Denis
Le 03-08-2005, Dam a écrit :
C'est un peu bourrin mais :

num=`grep -n 1234567890 fichier | cut -d: -f1 | head -n 1`;num=`expr
$num + 1`;sed -e '$numd' < fichier | sed -e '$numa(houba) (houba)
(hop)' > fichier.nouveau

Qu'en penses-tu?

:~$ echo $num

13
:~$ sed -e '$numd' < template
sed: -e expression n°1, caractère 3: Caractères inutiles après la commande

--
Kevin

Avatar
Stephane Chazelas
2005-08-4, 10:40(+00), Kevin Denis:
[...]
:~$ echo $num
13
:~$ sed -e '$numd' < template
sed: -e expression n°1, caractère 3: Caractères inutiles après la commande



sed "${num}d"

--
Stéphane