ฉันจะระงับเอาต์พุตจาก grep ได้อย่างไรเพื่อให้ส่งคืนสถานะออกเท่านั้น


57

ฉันมีgrepคำสั่ง ฉันกำลังค้นหาคำหลักจากไฟล์ แต่ไม่ต้องการแสดงผลลัพธ์ grepผมแค่อยากจะรู้ว่าออกจากสถานะของ

คำตอบ:


69

เวอร์ชันที่สอดคล้องกับ POSIXgrepใด ๆจะมีสวิตช์-qสำหรับเงียบ

-q
     Quiet. Nothing shall be written to the standard output, regardless
     of matching lines. Exit with zero status if an input line is selected.

ใน GNU grep (และอาจเป็นอย่างอื่น) คุณสามารถใช้คำพ้องความยาวแบบตัวเลือกเช่นกัน:

-q, --quiet, --silent     suppress all normal output

ตัวอย่าง

มีสตริง:

$ echo "here" | grep -q "here"
$ echo $?
0

ไม่มีสตริง:

$ echo "here" | grep -q "not here"
$ echo $?
1

6

เพียงเปลี่ยนเส้นทางของgrepไปยัง/dev/null:

grep sample test.txt > /dev/null

echo $?

1
สิ่งนี้จะล้มเหลวecho $?หากgrepส่งคืนโค้ดออกที่ไม่ใช่ศูนย์
WinnieNicklaus

2

คุณเพียงแค่ต้องรวมgrep -q <pattern>กับการตรวจสอบรหัสทางออกทันทีเพื่อให้กระบวนการสุดท้ายเลิก ( $?)

คุณสามารถใช้สิ่งนี้เพื่อสร้างคำสั่งเช่นนี้ตัวอย่างเช่น:

uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac

คุณสามารถเลือกที่จะไม่แสดงผลลัพธ์STDERRเช่น:

grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac

สิ่งนี้จะพิมพ์error: 2จากcaseคำสั่ง (สมมติว่าเราไม่มีสิทธิ์อ่าน/etc/shadowหรือไฟล์ไม่มีอยู่) แต่ข้อความแสดงข้อผิดพลาดจากgrepจะถูกเปลี่ยนเส้นทางไปยัง/dev/nullดังนั้นเราจึงไม่เคยเห็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.