クロスディストリビューションの安全な回答(Windows minGWを含む?)
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
-oオプションを含まない古いバージョンのgrep(2.4.2など)を使用している場合。上記を使用してください。または、以下のバージョンを維持するために、より単純な方法を使用します。
Linuxクロスディストリビューションの安全な回答
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
要約-oh
すると、正規表現がvim / etcで機能することを期待するのと同じように、正規表現がファイルの内容(ファイル名ではなく)に一致するものを出力します。検索する単語または正規表現は次のとおりです。君は!Perl構文ではなくPOSIXにとどまっている限り(以下を参照)
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 `[[:>:]]';
元の答えが誰にとってもうまくいかない理由
の使用は\w
、拡張された「perl」構文であるため、プラットフォームごとに異なります。そのため、POSIX文字クラスでの動作に限定されているgrepのインストールでは[[:alpha:]]
、perlに相当するものではなく、を使用し\w
ます。詳細については、正規表現のWikipediaページを参照してください
最終的に、上記のPOSIXの回答は、grepのプラットフォーム(オリジナル)に関係なく、はるかに信頼性が高くなります。
-oオプションなしのgrepのサポートに関しては、最初のgrepは関連する行を出力し、trはスペースを新しい行に分割し、最後のgrepはそれぞれの行のみをフィルタリングします。
(PS:私はほとんどのプラットフォームを今までに知っています、\ w ....のためにパッチが当てられているでしょうが、遅れているものは常にあります)
@AdamRosenfield回答の「-o」回避策のクレジット