#1 Le 19/11/2015, à 12:33
- RoodKrad
[Résolu] Afficher des lignes après un certain mot
Bonjour,
J'aimerais afficher des lignes de commande, par exemple d'un makefile, de la commande spécifié
Par exemple pour:
b.c: b.y
yacc b.y
mv y.tab.c b.c
J'aimerais juste afficher les deux lignes suivantes.
J'ai procédé de la sorte pour le moment:
cat $fichier | sed -n '/^'"$OPTARG"'/{n;p;}'
Malheureusement, ça ne m'affiche que la ligne qui suit, mais aussi la ligne suivante d'une ligne qui contient le même motif en début de ligne (par exemple pour b.cc).
J'aimerais savoir si il existe une forme plus poussé de sed pour faire ça, et si oui, comment, ou bien s'il fallait une autre commande (grep, egrep...)
Merci
Dernière modification par RoodKrad (Le 23/11/2015, à 21:54)
Hors ligne
#2 Le 19/11/2015, à 13:04
- pingouinux
Re : [Résolu] Afficher des lignes après un certain mot
Bonjour,
Peux-tu donner un exemple (fichier de départ, ce que tu souhaites obtenir) ?
Hors ligne
#3 Le 19/11/2015, à 13:07
- RoodKrad
Re : [Résolu] Afficher des lignes après un certain mot
J'ai ce fichier
#
# Exemple de fichier Makefile
#
a.out: a.o b.o c.o
cc a.o b.o c.o
a.o: a.c x.h
cc -c a.c
b.o: b.c
cc -c b.c
c.o: c.c x.h y.h
cc -c c.c
b.c: b.y
yacc b.y
mv y.tab.c b.c
#
# Une cible "fictive"
#
clean:
rm -f a.out core *.o b.c
Et donc avec mon script, en ayant pour argument une des commandes (par exemple b.c), j'aimerais afficher les commandes de la cible, soit
yacc b.y
mv y.yab.c b.c
Dernière modification par RoodKrad (Le 19/11/2015, à 13:07)
Hors ligne
#4 Le 19/11/2015, à 13:10
- pingouinux
Re : [Résolu] Afficher des lignes après un certain mot
motif=b.c
sed -n "/^$motif/{n;p;n;p}" fichier
Dernière modification par pingouinux (Le 19/11/2015, à 13:11)
Hors ligne
#5 Le 19/11/2015, à 13:15
- RoodKrad
Re : [Résolu] Afficher des lignes après un certain mot
Merci, ça marche, mais du coup quand une cible a un nombre de commandes différentes, par exemple 3, il n'y a pas un motif qui permet de prendre en compte ce nombre?
Et dans le cas de a.o, ça me prend aussi la commande pour a.out
Dernière modification par RoodKrad (Le 19/11/2015, à 13:16)
Hors ligne
#6 Le 19/11/2015, à 13:38
- pingouinux
Re : [Résolu] Afficher des lignes après un certain mot
Si, dans le fichier d'entrée, une ligne vide sépare les groupes de commandes :
sed -n '/^'$motif'/{:a;n;p;/^$/!ba}' fichier
ou
sed -n '/^'$motif'/{:a;n;/^$/!{p;ba}}' fichier
Dans la première forme, en sortie, les différents groupes sont séparés par une ligne vide; tout est contigu dans la seconde forme.
Dernière modification par pingouinux (Le 19/11/2015, à 13:39)
Hors ligne
#7 Le 19/11/2015, à 14:08
- RoodKrad
Re : [Résolu] Afficher des lignes après un certain mot
Impeccable, merci beaucoup.
Il me reste juste à trouver le cas où on a par exemple a.o et a.out, mais ça je pense que ça doit être un truc basique des ErB
Hors ligne
#8 Le 19/11/2015, à 14:25
- pingouinux
Re : [Résolu] Afficher des lignes après un certain mot
Il me reste juste à trouver le cas où on a par exemple a.o et a.out
Si tu veux les deux
motif="a.o"
Si tu veux juste a.o
motif="a.o:"
Hors ligne
#9 Le 19/11/2015, à 14:38
- RoodKrad
Re : [Résolu] Afficher des lignes après un certain mot
Merci.
Personnellement j'ai préféré faire \<'$OPTARG'\>, je ne sais pas en quoi c'est différent mais en tout ça marche aussi.
Hors ligne