Скрипт для поиска трех разных пользователей в Интернете и печати

Я пытаюсь создать сценарий, в котором пользователь может ввести 3 разных аргумента (имена пользователей), чтобы узнать, находятся ли они в сети.

В настоящее время у меня есть who | grep "^$1" who | grep "^$1" который вызовет тех, кого обыскали, но когда я пытаюсь добавить $ 2 и $ 3, как

 who | grep "^$1" "^$2" "^$3" 

он дает ошибку, не говоря о таком файле или каталоге, но он отлично работает, когда у меня есть только один аргумент. Какие-либо предложения?

3 Solutions collect form web for “Скрипт для поиска трех разных пользователей в Интернете и печати”

who | grep -e "^$1" -e "^$2" -e "^$3" who | grep -e "^$1" -e "^$2" -e "^$3" должен делать

Grep ведет себя по-разному в зависимости от типа используемого им механизма регулярного выражения. По умолчанию он использует Basic Regular Expressions, но также может использовать Extended Regular Expressions с -E а в версиях grep , поддерживающих эту функцию, Perl Compatible Regular Expressions с -P .

BRE может искать только два шаблона, не более. Синтаксис:

 grep 'pattern1\|pattern2' 

ERE и PCRE могут искать произвольное число, их синтаксис в этом отношении одинаковый, изменяется только флаг опции:

 grep -E 'pattern1|pattern2|pattern3|patternN' grep -P 'pattern1|pattern2|pattern3|patternN' 

Итак, для вашего случая вы можете сделать что-то вроде:

 who | grep -E "^$1|^$2|^$3" 

Я бы рекомендовал сделать что-то вроде этого:

 who | awk '{print $1}' 

awk будет печатать первый столбец или имена пользователей, которые в настоящее время вошли в систему.

Как отметил Тердон, чтобы сузить его до трех аргументов:

who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'

  • Почему одно и то же sed regex (после grep) выходит из строя при запуске в сценарии bash или командной строке bash?
  • Фильтровать большие наборы данных в датах с командной строкой
  • Как фильтровать вывод сценария в bash, используя запрос типа «(я ИЛИ вы) ИЛИ (john AND! Doe)»?
  • Solaris grep и регулярные выражения?
  • Есть ли способ изменить файл на месте?
  • Как «grep» для длины строки * not * в заданном диапазоне?
  • Справка Grep regex нужна
  • Греблирование фигур строки для создания новой строки
  • Как удалить несколько строк из файла с помощью оболочки
  • Лучшее решение для поиска групп идентификаторов (перестановки / комбинации)
  • Развернуть переменную среды из PIPE (SHELL)
  • Interesting Posts

    Как установить bash_logout для всех пользователей?

    Установить Mesa3D на Debian – LIBDRM не найден с помощью configure autoconf

    Как легко и безопасно обмениваться файлами в Linux-системе через Интернет?

    Какая спецификация sudoer позволяет пользователям монтировать фонды cifs?

    / etc / hosts ссылаются на другой файл конфигурации

    Получить переменные в двух отдельных строках

    Безопасное выход из цикла в bash

    Любой способ показать каждый шаг во время обработки команды?

    Установить локально с помощью dnf в Fedora без использования подключения к Интернету

    Можем ли мы добавить репозиторий Manjaro в Arch-Linux?

    Почему таблицы были встроены в ipchains?

    Запуск параллельных заданий по Ubuntu – различия между конфликтами ввода / вывода между Perl и Java

    Как отключить автоматическую прокрутку в терминале gnome?

    Какое программное обеспечение / команды можно использовать для удаления определенного IP-адреса из wtmp, btmp, lastlog?

    Grep и regex: Почему следующее возвращает только определенную часть?

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