Pages : 1
#1 Le 25/06/2017, à 15: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
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#2 Le 25/06/2017, à 17: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, à 17:56)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 25/06/2017, à 19:26
- Sciensous
Re : sed et dernier motif
merci Watel, mais en terme de simplicité, je préfère encore ma méthode
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#4 Le 25/06/2017, à 20:50
- Watael
Re : sed et dernier motif
quelqu'un a-t-il prétendu que sed est lisible ?
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
Pages : 1