Estou tentando criar um script onde um usuário pode inserir três argumentos diferentes (nomes de usuário) para ver se está online.
Atualmente, tenho who | grep "^$1"
o que exibirá quem for pesquisado, mas quando tento adicionar $ 2 e $ 3, como
who | grep "^$1" "^$2" "^$3"
ocorre um erro dizendo que esse arquivo ou diretório não existe, mas funciona bem quando tenho apenas um único argumento. Alguma sugestão?
Responder1
who | grep -e "^$1" -e "^$2" -e "^$3"
deveria fazer
Responder2
O Grep se comporta de maneira diferente dependendo do tipo de mecanismo de expressão regular que está usando. Por padrão ele usaExpressões regulares básicasmas também pode usarExpressões regulares estendidascom -E
e, em grep
versões que suportam esse recurso, Expressões regulares compatíveis com Perlcom -P
.
O BRE só pode procurar dois padrões, nada mais. A sintaxe é:
grep 'pattern1\|pattern2'
ERE e PCRE podem procurar um número arbitrário, sua sintaxe é a mesma nesse aspecto, apenas o sinalizador de opção muda:
grep -E 'pattern1|pattern2|pattern3|patternN'
grep -P 'pattern1|pattern2|pattern3|patternN'
Então, para o seu caso, você poderia fazer algo como:
who | grep -E "^$1|^$2|^$3"
Responder3
Eu recomendo fazer algo assim:
who | awk '{print $1}'
awk imprimirá a primeira coluna ou os nomes dos usuários conectados no momento.
Como Terdon apontou, para restringi-lo ainda mais a três argumentos:
who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'