Script para pesquisar 3 usuários diferentes on-line e imprimi-los

1

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?

    
por Dport86 15.10.2014 / 17:15

3 respostas

2

who | grep -e "^$1" -e "^$2" -e "^$3" deve fazer

    
por 15.10.2014 / 17:35
1

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"
    
por 15.10.2014 / 17:30
1

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'

    
por 15.10.2014 / 17:26

Tags