2012-11-06 2 views
14

Je veux trouver toutes les lignes dans mon fichier texte contenant la chaîne "abc", mais ne contenant pas la chaîne "def". Puis-je utiliser la commande grep pour accomplir cette tâche?grep sans chaîne

+1

Il semble que vous utilisiez grep pour vous aider à naviguer dans une base de code; si c'est le cas - j'ai récemment écrit un outil pour rendre cette activité beaucoup plus facile: http://reviewboardstudents.wordpress.com/2012/10/22/ucosp-blog-post-sack-and-other-developer-shortcuts/ Je serai utile pour vous aussi –

+0

Super, je vais jeter un coup d'oeil! –

Répondre

26

Soit de ceux-ci feront:

grep -v "def" input_file | grep "abc" 

ou

grep "abc" input_file | grep -v "def" 

Seront également préserver la coloration si vous voulez voir la sortie sur stdout:

grep --color=always "abc" input_file | grep -v "def" 

Le -v option (signifie "invert match") indique grep pour ignorer les lignes avec le modèle spécifié - dans ce cas def.

+0

Super, merci! Quand mon fichier_entrée est grand, y a-t-il une différence de vitesse entre votre premier et deuxième code? –

+1

@MikaH. Vous pouvez ajouter 'time' avant chacune des commandes de script pour voir combien de temps chacun prend. Je pense qu'il n'y a qu'une différence négligeable. –

+0

La partie sur la préservation de la coloration est vraiment utile. Merci encore! –

1

Cela pourrait le faire.

fgrep "abc" file | grep -v "def"