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.

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

6

Arahkan saja output grepke /dev/null:

grep sample test.txt > /dev/null

echo $?

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.