Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/06/2017, à 16:52

Sciensous

sed et dernier motif

ce post risque de ne pas rester longtemps non résolu:
dans un fichier texte contenant plusieurs lignes commençant par motif, quelle est la méthode la plus simple avec sed de ne modifier que la dernière ligne ?

je fais un truc assez lourdingue:

n=$(sed  -n '/motif/=' test |tail -1); sed "$n s/motif/xxx/" test

merci
wink


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#2 Le 25/06/2017, à 18:55

Watael

Re : sed et dernier motif

salut,

$ pattern='[aA]'
$ printf "%s\n" a b a b A b | sed -n ':loop;$!{N;bloop}; s/\(.*\n\)'"$pattern"'\(.*\)/\1xxxx\2/p'
a
b
a
b
xxxx
b

?

Dernière modification par Watael (Le 25/06/2017, à 18:56)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 25/06/2017, à 20:26

Sciensous

Re : sed et dernier motif

merci Watel, mais en terme de simplicité, je préfère encore ma méthode lol

roll


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#4 Le 25/06/2017, à 21:50

Watael

Re : sed et dernier motif

quelqu'un a-t-il prétendu que sed est lisible ?
lol

mais là, ce n'est pas très compliqué :
tant qu'on n'est pas arrivé à la fin du ficher - $!
on ajoute la ligne courante au tampon - N
on retourne à la marque au nom arbitraire loop - b loop
enfin, on utilise la caractéristique "greedy" (glouton) des regex pour la substitution avec référence arrière - \1 et  \2 correspondant au premier et deuxième motif entre parenthèse.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne