Distributionsübergreifende sichere Antwort (einschließlich Windows minGW?)
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
Wenn Sie ältere Versionen von grep verwenden (wie 2.4.2), die die Option -o nicht enthalten, dann verwenden Sie die obige Version. Andernfalls verwenden Sie die einfacher zu wartende Version unten.
Linux distributionsübergreifende sichere Antwort
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
Zusammengefasst: -oh
gibt den regulären Ausdruck aus, der auf den Inhalt der Datei (und nicht auf den Dateinamen) passt, genau so, wie man es von einem regulären Ausdruck in vim/etc. erwarten würde. Nach welchem Wort oder regulären Ausdruck Sie dann suchen, bleibt Ihnen überlassen! Solange Sie sich an POSIX und nicht an die Perl-Syntax halten (siehe unten)
Mehr aus dem Handbuch für grep
-o Print each match, but only the match, not the entire line.
-h Never print filename headers (i.e. filenames) with output lines.
-w The expression is searched for as a word (as if surrounded by
`[[:<:]]' and `[[:>:]]';
Der Grund, warum die ursprüngliche Antwort nicht für alle gilt
Die Verwendung von \w
variiert von Plattform zu Plattform, da es eine erweiterte "Perl"-Syntax ist. Daher verwenden diejenigen grep-Installationen, die auf die Arbeit mit POSIX-Zeichenklassen beschränkt sind [[:alpha:]]
und nicht sein Perl-Äquivalent von \w
. Siehe die Wikipedia-Seite über reguläre Ausdrücke für mehr
Letztendlich wird die obige POSIX-Antwort unabhängig von der Plattform viel zuverlässiger sein (da sie das Original ist) für grep
Was die Unterstützung von grep ohne die Option -o betrifft, so gibt das erste grep die relevanten Zeilen aus, das tr teilt die Leerzeichen in neue Zeilen auf, das letzte grep filtert nur nach den entsprechenden Zeilen.
(PS: Ich weiß, dass die meisten Plattformen inzwischen mit Patches für \w.... aber es gibt immer welche, die zurückbleiben)
Lob für die "-o"-Umgehung von @AdamRosenfields Antwort