ดูตัวเลือก-F
(สตริงคงที่ซึ่งตรงข้ามกับนิพจน์ทั่วไป) และ-x
(แน่นอน: จับคู่ทั้งบรรทัด)
grep -Fx user1@example.com text_file
จะเท่ากับ:
grep '^user1@example\.com$' text_file
(จำไว้ว่า.
เป็นตัวดำเนินการนิพจน์ทั่วไปที่ตรงกับอักขระใด ๆ )
ใช้-q
ตัวเลือกหากคุณต้องการตรวจสอบว่ามีบรรทัดดังกล่าวหรือไม่:
grep -Fxq user1@example.com 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' user1@example.com | comm -12 - text_file
ข้อดีจะชัดเจนมากขึ้นเมื่อคุณมีที่อยู่อีเมลหลายแห่งเพื่อตรวจสอบ (ตัวอย่างเช่นในไฟล์ที่เรียงลำดับอื่น):
comm -12 text_file emails_to_check
จะเร็วกว่า:
grep -Fxf emails_to_check text_file