who | grep -e "^$1" -e "^$2" -e "^$3"
deve fazer
Eu estou tentando criar um script onde um usuário pode inserir 3 argumentos diferentes (nomes de usuário) para ver se eles estão online.
Eu tenho atualmente who | grep "^$1"
, o que trará quem for pesquisado, mas quando eu tentar adicionar $ 2 e $ 3 como
who | grep "^$1" "^$2" "^$3"
dá um erro dizendo que não existe tal arquivo ou diretório, mas funciona bem quando eu tenho apenas o argumento único. Alguma sugestão?
who | grep -e "^$1" -e "^$2" -e "^$3"
deve fazer
O grep se comporta de maneira diferente, dependendo do tipo de mecanismo de expressão regular que está sendo usado. Por padrão, ele usa Expressões Regulares Básicas , mas também pode usar Expressões regulares prolongadas com -E
e, nas versões grep
que suportam esse recurso, Expressões regulares compatíveis com Perl com -P
.
O BRE só pode pesquisar dois padrões, não mais. A sintaxe é:
grep 'pattern1\|pattern2'
ERE e PCRE podem procurar por um número arbitrário, sua sintaxe é a mesma nesse aspecto, apenas o sinalizador de opção é alterado:
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"
Eu recomendaria fazer algo assim:
who | awk '{print $1}'
o awk irá imprimir a primeira coluna ou os nomes dos usuários atualmente conectados.
Como Terdon apontou, para reduzi-lo ainda mais a três argumentos:
who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'
Tags grep