Один лайнер, чтобы увидеть, вернул ли grep что-то?

Я пытаюсь проверить, является ли машина ThinkPad или не использует что-то вроде этого:

sudo dmidecode | grep ThinkPad 

Я хочу, чтобы конечный результат возвращал true или false (или 1/0).

Я думаю, что решение может быть примерно таким:

 sudo dmidecode | grep -c ThinkPad | test xargs -gt 0 

Но я не уверен, как правильно использовать xargs здесь.

  • опция xargs -I
  • Что делает xargs, если он используется без каких-либо параметров?
  • Использование xargs с git
  • Что такое replstrs как {}?
  • Перемещение подкаталога в новый родительский каталог, где новое имя каталога увеличивается на 1
  • Найдите файлы с определенным форматом файлов, коту, каждый с файлом заголовка, и сохраните результат в исходный файл для каждого такого файла
  • Почему xargs вырезает цитаты из ввода?
  • Выполнение одной и той же команды с разными аргументами параллельно
  • 5 Solutions collect form web for “Один лайнер, чтобы увидеть, вернул ли grep что-то?”

    Просто снимите проверку статуса выхода после grep , она всегда будет получать статус выхода из последней команды конвейера по умолчанию:

     sudo dmidecode | grep -q ThinkPad; echo $? 

    Используйте -q для подавления любого выхода из grep поскольку мы заинтересованы только в статусе выхода.


    Вы можете использовать группировку команд, если хотите, но здесь это несколько избыточно:

     sudo dmidecode | { grep -q ThinkPad; echo $? ;} 

    Если вы собираетесь использовать этот сценарий оболочки с проверкой if , просто используйте -q как предположил heemayl:

     if sudo dmidecode | grep -q Thinkpad then echo "I'm a Thinkpad" fi 

    Поскольку блок if проверяет статус выхода команды, мы можем полагаться на статус выхода grep напрямую, а не на печать $? и сравнение его с чем-то другим.

    Вдохновленный ответом Хемаяля :

     sudo dmidecode | grep -q ThinkPad && echo true || echo false 

    Это вернет true, если ThinkPad будет найден grep и false, если нет.

    Используя command substitution test и command substitution ,

     test -n "$(sudo dmidecode | grep Thinkpad)" 

    также,

     [ -n "$(sudo dmidecode | grep Thinkpad)" ] 
     sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt 

    Вам нужно переставить команды xargs и test так же как и операнды, чтобы получить то, что вы хотите. Это вернет истинный статус, если есть ненулевые (> 0) ThinkPad, содержащие строки.

    В качестве альтернативы, если вы хотите сохранить порядок операндов тестовой команды, вы можете сделать

     sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0 

    А затем, в обеих командах, проверьте значение $? значение переменной, чтобы определить судьбу успеха / неудачи grep следующим образом:

     if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then echo "success hooray!" else echo nothing fi 
    Interesting Posts

    Ошибка pcregrep newline lookbehind?

    Почему потоки с самым высоким приоритетом отображаются с RT в верхнем и верхнем тонах?

    yum install не работает со странным выходом

    Как создать внешнюю, файловую систему, точку входа только для чтения для внутренней памяти процесса?

    Установка Unity или Gnome 3 в Debian

    Добавление связанного имени пользователя в журнал регистрации syslog

    Каково историческое происхождение CTRL + P для up и CTRL + N для down?

    Как эффективно генерировать большие, равномерно распределенные случайные целые числа в bash?

    Невозможно отключить полноэкранный режим из сценария i3

    Как войти в папку foo- * без фактического использования подстановочных или оболочечных расширений?

    Как я могу предотвратить появление «grep» в результатах ps?

    Miniupnp считает, что мой маршрутизатор не поддерживает UPnP

    Приложения KDE выглядят уродливыми по сравнению с ssh

    Многомесячный просмотр в календаре (cal) в OS X

    dircolors "отсутствует второй токен"

    Linux и Unix - лучшая ОС в мире.