たとえば、多くの電子メールアドレスを含む大きなテキストファイルがあり、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
代わりに使用して作業を高速化できます。comm
grep
printf '%s\n' [email protected] | comm -12 - text_file
確認する電子メールアドレスが複数ある場合(たとえば、他のソートされたファイルなど)、利点はより明らかになります。
comm -12 text_file emails_to_check
次よりも速いです。
grep -Fxf emails_to_check text_file