grepを使って正確な文字列を見つける

grepを使って正確な文字列を見つける

たとえば、多くの電子メールアドレスを含む大きなテキストファイルがあり、bashを使用して電子メールが存在する(または存在しない)かどうかを検索/確認する必要があります。 「アンカー」のみを使用する必要がありますか?

grep '^[email protected]' text_file

それとももっと良い方法がありますか? bashスクリプトを作成する必要がありますが、安全でありたいです。

ベストアンサー1

-F(正規表現ではなく固定文字列)および-x(正確には:完全行一致)オプションを参照してください。

grep -Fx [email protected] text_file

以下と同じ:

grep '^user1@example\.com$' text_file

(これは.すべての文字に一致する正規表現演算子であることを覚えておいてください。)

-qそのような行が存在することを確認するには、次のオプションを使用します。

grep -Fxq [email protected] text_file &&
  echo yes, that address is in that file.

検索する行とファイル名が可変の場合:

grep -Fxqe "$email" < "$file"

または

grep -Fxq -- "$email" < "$file"

あなたが望まない:

grep -Fxq "$email" "$file"

$emailなぜなら、または$file起動すると問題が発生するからです-

ファイルがすでにソートされている場合(好ましくは現在のロケールで)、次のC代わりに使用して作業を高速化できます。commgrep

printf '%s\n' [email protected] | comm -12 - text_file

確認する電子メールアドレスが複数ある場合(たとえば、他のソートされたファイルなど)、利点はより明らかになります。

comm -12 text_file emails_to_check

次よりも速いです。

grep -Fxf emails_to_check text_file

おすすめ記事