特定の文字列を見つけるためにgrepする方法は?

特定の文字列を見つけるためにgrepする方法は?

次のパターンに一致する文字列を取得しようとしています。で始まり、fooで終わりますbar

grep -e "^foo*bar$"

答え1

一致させるパターンは3つの部分に分かれています。

  • 最初は、「foo」で文字列を開始することです。したがって、スタートアンカー '^foo'を使用してください。
  • 2番目は文字列を「bar」で終わります。ここでは、終了アンカー 'bar$'を使用します。
  • 3番目の部分は、開始アンカーポイントと終了アンカーポイントの間のコンテンツです。あなたの場合、すべての文字を0回以上一致させようとします(つまり、間に文字がある場合とない場合があります)。これは「.*」という表現で表されます。ドットはすべての文字と一致し、アスタリスク数量子は0回以上一致することができることを指定します。

これをすべて合わせると、次のような表現が出ます。

grep '^foo.*bar$' file

たとえば、次のテストファイルを考えてみましょう。

$ cat testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123
123 foo bar 123

次にgrep、次のコマンドを実行します。

$ grep '^foo.*bar$' testfile
foobar
foo bar
foo 123 bar

grep -e "^foo" -e "bar$" file注釈()に指定したバリアントは異なる動作をします。

$ grep -e "^foo" -e "bar$" testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123

-eこれは、OR演算を使用してオプションを結合するためです。元の結果に加えて、結果の一致と結果の一致も^foo.*bar$取得できます。^foobar$

関連情報