辞書ファイルで特定の属性を持つ単語を検索する

辞書ファイルで特定の属性を持つ単語を検索する

orで始まりb、終わり、orを含む単語をテキストファイルから検索します。oig

上記の仕様に対応する単語が表示される端末にコマンドを入力する必要があります。

以下を使用しましたが、2つ以上の単語があり、スペースが含まれています。

~$  egrep -n '\bb.*(i|g).*o\b'

私はLinux Ubuntuを使用していますが、このステートメントをどのように実行するのかわかりません。いくつかのガイドラインを試しましたが、すべて失敗しました。これを行うのが難しいので、正規表現の問い合わせを解くのに役立つ人はいますか?

たとえば、テキストファイルに次のランダムな単語があるとします。

boo djhg
bio jdjjf
dgdhd bgo
ghhh

次に、「boo」、「bio」、および「bgo」という単語を強調表示する必要があります。

ベストアンサー1

探しているコマンドはgrepであり、ほしい正規表現はですb[[:alnum:]]*[ig][[:alnum:]]*o

  • [[:alnum:]]単一の英数字と一致します。
  • *前の式のすべての数字(0を含む)と一致します。
  • [ig]単一iまたはに一致しますg
  • この特定の正規表現の他のすべての文字(および)はb独自に一致します。o

[[:alnum::]]*スペースを含む単語が一致しないようにするには、notを使用してください.*

grep使い方は次のとおりです

grep OPTIONS 'EXPRESSION' INPUT-FILES

EXPRESSION標準出力(この場合は端末)と一致する行を出力します。

この場合、式が単語(単語以外の文字で囲まれた文字列)と一致するように強制し、行全体ではなく一致するデータのみを返す-wandオプションを使用する必要があります。-o

$ grep -w -o 'b[[:alnum:]]*[ig][[:alnum:]]*o' words
bio
bgo

欲しいと言われました。強調する一致する単語。これがgrepGNUができることです。ここでは、各一致に対して行全体を取得するオプションを放棄しました-o。それ以外の場合は、以前と同じ結果が得られますが、強調表示が含まれていて退屈です。

$ grep --color -w 'b[[:alnum:]]*[ig][[:alnum:]]*o' 単語
生物学ジェップバゴ

ご覧のとおり、これは一致を含む行の一致のみを表示します。完全な入力(一致する行がなくても)を表示し、一致する項目を強調表示するには、オプションを削除して次の操作を-w行う必要があります。

$ grep --color -E '\bb[[:alnum:]]*[ig][[:alnum:]]*o\b|$' 単語
シェン
生物学ジェップバゴ
よく

拡張正規表現なので、-Eこのオプションを追加する必要があります。すべての単語の境界で一致|します。\b

おすすめ記事