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

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

Мне нужна однострочная команда, которая выводит «да» или «нет» в зависимости от того, нашла ли grep какие-либо результаты.

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

решение1

Как насчет:

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 и не найдена выбранная строка.

решение2

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

Просто добавьте ; 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

решение3

Эта версия является промежуточной междуВебоидаверсия ирадиусыверсия:

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

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

Связанный контент