
Мне нужна однострочная команда, которая выводит «да» или «нет» в зависимости от того, нашла ли 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