Intereting Posts

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

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

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

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

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

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'