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 19/11/2015, à 13: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, à 22:54)

Hors ligne

#2 Le 19/11/2015, à 14: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, à 14: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, à 14:07)

Hors ligne

#4 Le 19/11/2015, à 14: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, à 14:11)

Hors ligne

#5 Le 19/11/2015, à 14: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 sad

Dernière modification par RoodKrad (Le 19/11/2015, à 14:16)

Hors ligne

#6 Le 19/11/2015, à 14: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, à 14:39)

Hors ligne

#7 Le 19/11/2015, à 15: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, à 15: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, à 15: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