beachという言葉を見つけなければなりません。この単語がbで始まりchを含めるように指定するにはどうすればよいですか?私はgrep '^s.*ch'を使ってみましたが、それを含む行を印刷しましたが、私は単に単語が欲しかったです。
答え1
問題は、.*
スペースを含むすべての文字シーケンス(改行文字を省略可能)を一致させることです。
したがって、単語を構成する文字のみを一致させるように変更したいと思います。これを行う正確な方法は、使用する正規表現の実装と他のアルファベットの文字を記述するかどうかによって異なります。合理的に移植可能なアプローチは、以下を使用することです。[[:alpha:]]*
単語の先頭で一致する構文も実装によって異なります。 grepの場合\<
。
-o
単語を取得するのに役立つ2つのgrepオプションがあります--color
。前者は一致するものだけを出力し、後者は行全体を出力し、一致するものを強調表示します。
だからあなたは欲しいかもしれません
grep -o '\<b[[:alpha:]]*ch' filename
答え2
$ grep -o '\<b[a-z]*ch[a-z]*' file
b
これにより、で始まるすべての単語が表示されますch
。どちらも[a-z]*
小文字と一致します。\<
このb
単語の最初の文字であることを確認してください。
オプションを使用すると、行全体ではなく一致する文字列のみが返されます-o
。grep
選択する:
$ grep -o '\<b[[:lower:]]*ch[[:lower:]]*' file
あなたのパターンは^s.*ch
何でも一致しますワイヤー同じ行にある別の場所から始めてs
含めます。ch