Назад | Перейти на главную страницу

эхо на основе результата grep

Мне нужен один лайнер, который отображает «да» или «нет», находит ли grep какие-либо результаты.

Я играл с grep -c, но безуспешно.

Как насчет:

uptime | grep user && echo 'yes' || echo 'no'
uptime | grep foo && echo 'yes' || echo 'no'

Тогда вы можете сделать это тихо:

uptime | grep --quiet user && echo 'yes' || echo 'no'
uptime | grep --quiet foo && echo 'yes' || echo 'no'

На странице руководства grep:

СТАТУС ВЫХОДА

Обычно статус выхода равен 0, если выбранные строки найдены, и 1 в противном случае. Но статус выхода равен 2, если произошла ошибка, если не используется опция -q или --quiet или --silent и не найдена выбранная строка.

Эта версия занимает промежуточное положение между Weboide's версия и радиус версия:

if grep --quiet foo bar; then echo "yes"; else echo "no"; fi

Он более читабелен, чем первый, и не использует без надобности $? как последний.

Не уверен, что вы имеете в виду под «одним лайнером», для меня это «однострочный»

Просто добавь ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi после команды grep

bash$ grep ABCDEF /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
No
bash$ grep nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
nameserver 212.27.54.252
Yes

Добавьте флаг -q в grep, если вы хотите подавить результат grep

bash$ grep -q nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
Yes