テキスト ファイル内で、で始まりb
、で終わり、またはo
を含む単語を検索します。i
g
上記の仕様を持つ単語を表示するターミナルにコマンドを入力する必要があります。
次のようなものを使用しましたが、1 つの単語で止まらず、空白が含まれています。
~$ 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:]]
単一の英数字に一致します。*
前の表現の任意の数(ゼロを含む)に一致します。[ig]
は単一のi
またはと一致しますg
。- この特定の正規表現内の他のすべての文字 (
b
および) は、その文字自体に一致します。o
[[:alnum::]]*
「rather than」を使用すると.*
、スペースを含む単語の一致が回避されます。
grep
のように使われる
grep OPTIONS 'EXPRESSION' INPUT-FILES
一致する行をEXPRESSION
標準出力(この場合は端末)に出力します。
この場合、およびオプションを使用すると-w
、-o
式が単語 (単語以外の文字で囲まれた文字列) に一致するように強制され、一致したデータのみ (行全体ではない) が返されます。
$ grep -w -o 'b[[:alnum:]]*[ig][[:alnum:]]*o' words
bio
bgo
あなたは、ハイライト一致した単語。これは GNU でgrep
実行できることです。-o
ここでは、一致した各単語の行全体を取得するオプションを削除しています。そうしないと、以前と同じ結果が強調表示されるだけになり、退屈になります。
$ grep --color -w 'b[[:alnum:]]*[ig][[:alnum:]]*o' 単語 バイオ翻訳 いいえビーゴー
ご覧のとおり、これは一致を含む行の一致のみを表示します。一致が強調表示された状態で入力全体(一致のない行も含む)を表示するには、オプションを削除して次のようにします-w
。
$ grep --color -E '\bb[[:alnum:]]*[ig][[:alnum:]]*o\b|$' 単語 ブー djhg バイオ翻訳 いいえビーゴー ぐぅぅ
は拡張正規表現なので、-E
オプションを追加する必要がありました。 はどの単語境界でも一致します。|
\b
答え2
私はgrep
これを次のように行います:
egrep -i "^b.*(i|g)+.*o$" /usr/share/dict/words
^b
「b」で始まる.*
いつでも何でも(i|g)*
「i」または「g」を1回以上o$
「o」で終わる
答え3
set -f; for w in `cat /usr/share/dict/words`; do
case $w in b*[ig]*o ) echo "$w" ;; esac
done
# you could as well say: $(< /usr/share/dict/words) in place of the backquoted cat.
# if your version of bash supports it.
単語ファイルを単語に分割し$w
、ワイルドカード チェックを実行します。
- ワイルドカードパターンは b*[ig]*o で、次のように読み取られます。
- $w は文字「b」で始まる必要があります。
- $w は文字「o」で終わる必要があります。
- $w が一致するには、その中間に「i」または「g」のいずれかが含まれている必要があります。
- 一致が成功すると、その単語が表示されます。