2017-09-28 3 views
0

Son été demandé plusieurs fois, mais ce n'est pas encore clair pour moi.Comment gérer "-" dans grep?

J'ai le texte suivant dans un fichier (data.txt, onglet delimeted):

ABC 12 
ABC-AS 14 
DEF 18 
DEF-AS 9 

Maintenant, je veux rechercher ABC et DEF, mais pas ABC-AS, DEF-AS suite .

grep -w ABC data.txt 

Sortie:

grep -w ABC data.txt 
ABC 
ABC-AS 


grep --no-group-separator -w "ABC" data.txt  
ABC 
ABC-AS 

grep --group-separator="\t" -w "ABC" data.txt 
ABC 
ABC-AS 
+0

Si votre version de 'grep' a Perl Regexes disponible , vous pouvez utiliser un lookahead négatif. Vous pouvez rechercher 'ABC', puis post-filtrer' grep -v 'ABC- [A-Z] '' ou à peu près. –

+1

Avec la description révisée, pouvez-vous utiliser 'grep '^ ABC [[: space:]]'' pour trouver les lignes qui commencent par 'ABC' et non' ABC-AS'? Ou 'grep -E '^ (ABC | DEF) [[: space:]]'' si vous voulez aussi 'DEF'. –

+1

Ou 'grep" ABC \ s "data.txt'. Pour plusieurs motifs: 'grep -e" ABC \ s "-e" DEF \ s "data.txt' –

Répondre

1

Avec un regex

grep -E "(ABC|DEF)[^\-]" data.txt 

Détails

(ABC|DEF): Match "ABC" ou "DEF"

[^\-]: Tout sauf "-"

Sortie

ABC 12 
DEF 18 
1

Essayez ce qui ne sélectionner que les matchs qui correspondent exactement à toute la ligne

grep --line-regexp "ABC" data.txt 
+0

Je suis désolé. le fichier contient d'autres colonnes. J'ai mis à jour la requête pour refléter la situation exacte. – gthm

+1

Dans ce cas, essayez ceci: 'grep" ABC [[: blank:]] ". \ Data.txt' –