2009-10-04 12 views
1

J'essaie d'utiliser grep pour correspondre à un cas comme celui-ci:Grep avec « la moitié » match de -exact

J'ai une liste de nom d'hôte et ips dans ce format:

238-456 192.168.1.1 
ak238-456 192.168.1.2 
238-456a 192.168.1.3 
458-862 192.168.1.4 

Maintenant, je tente de grep "238-456" mais bien sûr cela retourne:

238-456 192.168.1.1 

et ...

ak238-456 192.168.1.2 

et ...

238-456a 192.168.1.1 

mais je ne ai besoin de la ligne avec 238-456 exactement. Dans ce cas, je ne peux pas utiliser -x parce que, bien sûr, il ne renvoie aucun résultat.

Existe-t-il un moyen simple de résoudre ce problème?

Les réponses données avec "^" résolvent le premier problème. Mais pas celui avec le "a" à la fin. Quelqu'un peut-il aussi aider avec ça?

Répondre

5

Dans cet exemple spécifique, vous pouvez rechercher ^238-456, qui correspond uniquement lorsque le texte souhaité apparaît au début de la ligne. Pour une solution plus générale, découvrez les expressions régulières (dont voici un exemple).

modifier:

Pour votre nouveau problème, vous pouvez simplement inclure un espace manuellement en recherchant "^238-456 ". Il existe également des classes de caractères regexp pour les espaces. "^238-456\>" devrait fonctionner ici. Le \> indique une limite de mot et vous devez probablement inclure les guillemets. L'autre limite de mot est \<, donc vous pouvez changer le tout en "\<238-456\>" et cela enlèverait la dépendance sur le fait qu'il soit au début de la ligne.

+0

merci. fonctionne comme un charme. mais maintenant j'ai trouvé entrys avec un "a" à la fin. Y a-t-il aussi une solution pour cela? J'ai édité ma question. – fwaechter

+0

Ok, mis à jour avec des marqueurs de délimitation de mots. – kwatford

+0

fonctionne parfaitement. merci pour votre temps et aide :) – fwaechter

0

Vous pouvez utiliser des expressions régulières:

egrep "^238-456" 

devrait faire, demander de vérifier dès le début de la ligne.

Un exemple de tutoriel pour ces expressions régulières peut être trouvé here.

2

utilisation awk

awk '$1=="238-456"' file