Grep'ten çıktıyı nasıl bastırabilirim ki sadece çıkış durumunu döndürür?


57

Bende grepemir var. Bir dosyadan bir anahtar kelime arıyorum, ancak eşleşmeyi görüntülemek istemiyorum. Ben sadece çıkış durumunu bilmek istiyorum grep.

Yanıtlar:


69

POSIX uyumlugrep herhangi bir sürümü-q sessiz anahtarına sahiptir :

-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'te (ve muhtemelen diğerlerinde), uzun-seçenek eş anlamlılarını da kullanabilirsiniz:

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

Örnek

Dize var:

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

Dize mevcut değil:

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

6

Sadece çıktısını yönlendirmek grepiçin /dev/null:

grep sample test.txt > /dev/null

echo $?

1
Sıfır olmayan bir çıkış kodu echo $?verirse bu başarısız olur grep.
WinnieNicklaus

2

Çıkmanız gereken grep -q <pattern>son işlem için çıkış kodunu hemen kontrol etmeniz yeterlidir ( $?).

Bu gibi bir komut oluşturmak için bunu kullanabilirsiniz, örneğin:

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

İsteğe bağlı olarak çıktıyı şu şekilde bastırabilirsiniz STDERR:

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

Bu error: 2, caseaçıklamadan yazdırır (okuma ayrıcalıklarına sahip olmadığımızı /etc/shadowveya dosyanın mevcut olmadığını varsayarsak ), ancak gelen hata mesajı hiçbir grepzaman görmememiz için yönlendirilir /dev/null.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.