61 votes

Unix grep regex contenant 'x' mais pas 'y'.

J'ai besoin d'une regex à passage unique pour unix grep qui contient, disons alpha, mais ne contient pas beta.

grep 'alpha' <> | grep -v 'beta'

1 votes

Veuillez afficher un exemple d'entrée et de sortie attendue. Comment voulez-vous que le paramètre 'y' ne corresponde pas à toutes les lignes sauf 'x' ? Ce qui est une autre façon de dire que vous pouvez vouloir une passe grep 1, mais vous avez probablement besoin d'une passe grep 2 OU awk ou perl script pour une passe unique. Par ailleurs, ce n'est pas mon vote négatif. Peut-être que quelqu'un expliquera pourquoi c'est une mauvaise question ! Bonne chance.

0 votes

Je pense que c'est une question raisonnable à poser (donc +1 de ma part) d'autant plus que je l'ai déjà vue posée auparavant, et que je l'ai même posée moi-même.

0 votes

@shellter : Je connaissais plusieurs façons de le faire en utilisant awk, sed et perl. Même la commande grep peut le faire avec un pipe (j'ai ajouté une ligne d'exemple dans la question). Je voulais juste voir si cela pouvait être fait en une seule fois. Il semble que ce soit possible (réponse de Mr47 ci-dessous) et j'ai pu apprendre le look-ahead et le look-behind en perl. C'est amusant d'apprendre de nouveaux trucs dans n'importe quel langage. Je ne comprends pas pourquoi vous pensez que c'est une mauvaise question. Et j'ai également voté en faveur de votre réponse :)

-3voto

La solution la plus simple :

grep "alpha" * | grep -v "beta"

Veuillez faire attention aux espaces et aux guillemets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X