1019 Stimmen

Kann grep nur Wörter anzeigen, die dem Suchmuster entsprechen?

Gibt es eine Möglichkeit, grep dazu zu bringen, "Wörter" aus Dateien auszugeben, die dem Suchausdruck entsprechen?

Wenn ich alle Instanzen von, sagen wir, "th" in einer Reihe von Dateien finden will, kann ich das tun:

grep "th" *

aber die Ausgabe wird in etwa so aussehen (Fettdruck von mir);

some-text-file : **the** cat sat on **the** mat  
some-other-text-file : **the** quick brown fox  
yet-another-text-file : i hope **this** explains it **thoroughly** 

Ich möchte mit der gleichen Suche Folgendes ausgeben:

the
the
the
this
thoroughly

Ist dies mit grep möglich? Oder mit einer anderen Kombination von Tools?

13voto

Raghu Punkte 129

Grep-Befehl nur für Matching und Perl

grep -o -P 'th.*? ' filename

10voto

Mumbling Mac Punkte 91
cat *-text-file | grep -Eio "th[a-z]+"

10voto

Beau Punkte 10809

Ich war unzufrieden mit der schwer zu merkenden Syntax von awk, aber ich mochte die Idee, ein einziges Dienstprogramm für diese Aufgabe zu verwenden.

Es scheint, als ob ack (oder ack-grep, wenn Sie Ubuntu verwenden) dies einfach tun kann:

# ack-grep -ho "\bth.*?\b" *

the
the
the
this
thoroughly

Wenn Sie das Flag -h weglassen, erhalten Sie:

# ack-grep -o "\bth.*?\b" *

some-other-text-file
1:the

some-text-file
1:the
the

yet-another-text-file
1:this
thoroughly

Als Bonus können Sie die --output Flagge, um dies für komplexere Suchen mit der einfachsten Syntax, die ich gefunden habe, zu tun:

# echo "bug: 1, id: 5, time: 12/27/2010" > test-file
# ack-grep -ho "bug: (\d*), id: (\d*), time: (.*)" --output '$1, $2, $3' test-file

1, 5, 12/27/2010

4voto

Maciek Sawicki Punkte 6371

Sie können auch versuchen pcregrep . Es gibt auch eine -w Option in grep , aber in manchen Fällen funktioniert es nicht wie erwartet.

Von Wikipedia :

cat fruitlist.txt
apple
apples
pineapple
apple-
apple-fruit
fruit-apple

grep -w apple fruitlist.txt
apple
apple-
apple-fruit
fruit-apple

4voto

Sandeep Punkte 26349

Um alle Wörter zu suchen, die mit "icon-" beginnen, funktioniert der folgende Befehl perfekt. Ich verwende Ack hier, das ähnlich wie grep funktioniert, aber bessere Optionen und eine bessere Formatierung bietet.

ack -oh --type=html "\w*icon-\w*" | sort | uniq

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X