ฉันมีgrep
คำสั่ง ฉันกำลังค้นหาคำหลักจากไฟล์ แต่ไม่ต้องการแสดงผลลัพธ์ grep
ผมแค่อยากจะรู้ว่าออกจากสถานะของ
ฉันมีgrep
คำสั่ง ฉันกำลังค้นหาคำหลักจากไฟล์ แต่ไม่ต้องการแสดงผลลัพธ์ grep
ผมแค่อยากจะรู้ว่าออกจากสถานะของ
คำตอบ:
เวอร์ชันที่สอดคล้องกับ 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
เพียงเปลี่ยนเส้นทางของgrep
ไปยัง/dev/null
:
grep sample test.txt > /dev/null
echo $?
คุณเพียงแค่ต้องรวม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
ดังนั้นเราจึงไม่เคยเห็น
echo $?
หากgrep
ส่งคืนโค้ดออกที่ไม่ใช่ศูนย์