Відповіді:
Будь-яка версія, сумісна з 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
Вам потрібно просто поєднати 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
поверне ненульовий код виходу.