Bagaimana saya bisa menekan output dari grep, sehingga hanya mengembalikan status keluar?

57

Saya punya grepperintah. Saya mencari kata kunci dari file, tetapi saya tidak ingin menampilkan kecocokan. Saya hanya ingin tahu status keluar dari grep.

jackass27
sumber

Jawaban:

69

Setiap versi yang sesuai dengan POSIXgrep memiliki sakelar -quntuk senyap:

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

Dalam GNU grep (dan mungkin yang lain) Anda juga dapat menggunakan sinonim opsi panjang:

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

Contoh

String ada:

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

String tidak ada:

$ echo "here" | grep -q "not here"
$ echo $?
1
slm
sumber
6

Arahkan saja output grepke /dev/null:

grep sample test.txt > /dev/null

echo $?
cuonglm
sumber
1
Ini akan gagal echo $?jika grepmengembalikan kode keluar yang tidak nol.
WinnieNicklaus
2

Anda hanya perlu menggabungkan grep -q <pattern>dengan pemeriksaan langsung kode keluar untuk proses terakhir untuk berhenti ( $?).

Anda dapat menggunakan ini untuk membangun perintah seperti ini, misalnya:

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

Anda secara opsional dapat menekan output dari STDERRseperti:

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

Ini akan dicetak error: 2dari casepernyataan (dengan asumsi kita tidak memiliki hak istimewa untuk membaca /etc/shadowatau bahwa file tersebut tidak ada) tetapi pesan kesalahan dari grepakan dialihkan ke /dev/nullsehingga kita tidak pernah melihatnya.

Charles Boyd
sumber