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

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

sudo dmidecode | grep ThinkPad 

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

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

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

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

  • xargs git: пропустить ввод пользователя
  • Есть ли способ сделать этот однострочный лайнер быстрее?
  • Как подключить вывод поиска к другому вызову find
  • Удаление номеров из имен файлов
  • Список протоколов файлов и каталогов на du показывает только размеры каталогов?
  • почему не xarss правильно разбирает мой вход?
  • Безопасный поиск и удаление файлов
  • Добавить строку во многие файлы
  • 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 
    Linux и Unix - лучшая ОС в мире.