Мне нужен один лайнер, который отображает «да» или «нет», находит ли 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