Як я можу придушити вихід з grep, щоб він лише повертав статус виходу?


57

Я маю grepкоманду. Я шукаю ключове слово з файлу, але не хочу відображати відповідність. Я просто хочу знати статус виходу grep.

Відповіді:


69

Будь-яка версія, сумісна з POSIX,grep має вимикач -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так, щоб ми його ніколи не бачили.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.