2017-04-11 2 views
0

Ich möchte die Zeilen erhalten, die ein definiertes Wort mit grep enthalten.Wie kann ich ein ganzes Wort mit Grep bekommen?

Edit: Die Lösung war this eins.

Ich weiß, dass ich die Option -w verwenden kann, aber es scheint nicht den Trick zu tun.

Beispiel: Jedes Wort, das mein definiertes Wort enthält, das durch Satzzeichen getrennt ist, ist enthalten. Wenn ich für Hunde aussehen, wird es mir Linien zeigen, dass nicht nur Hunde Wort enthalten, sondern auch cats.dogs, Katzen-Hunde usw.

# cat file.txt 
some alphadogs dance 
some cats-dogs play 
none dogs dance 
few dog sing 
all cats.dogs shout 

Und mit grep:

# cat file.txt | grep -w "dogs" 
some cats-dogs play 
none dogs dance 
all cats.dogs shout 

gewünschte Ausgabe:

# cat file.txt | grep -w "dogs" 
none dogs dance 

Kennen Sie eine Workaround, mit der Sie das ganze Wort bekommen können? Ich habe es mit \ b oder \ < mit negativen Ergebnissen getestet.

Danke, Eudald

+0

anzeigen erwartete Ausgabe – 123

+2

'grep würde -w' offensichtlich nicht hier @triplee arbeiten, kann es nicht sein dupliziert mit der aktuellen Frage – Inian

+1

'grep -w' fehlgeschlagen, da Interpunktion und Ende/Anfang des Zeilenzeichens als Nicht-Wort-Zeichen betrachtet werden; auch wenn es funktioniert hat, kann die Implementierung sehr langsam sein –

Antwort

1

Verwenden Sie die Wortgrenze Anker, in einer beliebigen Version von grep haben Sie

grep '^dogs$' file.txt 

Ein Auszug aus dieser regular-expressions Seite,

Anker installiert

[..] Anker passen keine Zeichen an. Sie passen zu einer Position. ^ Treffer zu Beginn des Strings, und $ Matches am Ende der Zeichenfolge [..]

+0

Haben Sie es sogar mit den von mir bereitgestellten Beispielen getestet? Es funktioniert nicht –

+0

@eudald_v: Sie haben uns nicht mit Ihnen Beispiel Updates wissen lassen, verweisen Sie die Zeitstempel zu sehen. Kein Problem, kannst du 'grep '[[: space:]] dogs [[: space:]]' Datei 'versuchen, was dein Problem lösen sollte. lassen Sie uns wissen, wenn es – Inian

+0

getan hat löst es nur das Beispiel, wenn die Zeichenfolge ein Leerzeichen vor hat, die in dem Beispiel passiert, aber nicht passieren konnte, wenn die Zeichenfolge am Anfang oder Ende des Satzes ist. Jedenfalls habe ich die Frage nochmal mit der Antwort bearbeitet, die ich schließlich gefunden habe, die funktioniert. –

1

Versuchen mit -x Parametern.

grep -x dogs file.txt 

Von grep Handbuch:

-x, --line-regexp

Wählen Sie nur die Übereinstimmungen aus, die genau der gesamten Zeile entsprechen. (-x wird von POSIX angegeben.)

HINWEIS: cat nutzlos ist, wenn Sie Rohr seine Ausgabe an grep

+0

Haben Sie es sogar mit den von mir bereitgestellten Beispielen getestet? Es funktioniert nicht –