Função para simplificar o grep com um log usado com frequência

6

Primeiro, desculpe se esta é uma questão dolorosamente nova!

Estou tentando criar uma função que simplifique o uso de um log com o qual tenho que trabalhar regularmente.

Gostaria de usar o regexp estendido com o pipe e redirecionar a saída, etc.

Mas estou tendo problemas para fazer isso usando a sintaxe padrão do arquivo de padrões grep na função.

A maneira que eu o configure agora é horrível de se ver, mas o trabalho é feito:

alias mygrep='cat /path/to/logs/my.log | grep'

Isso me permite executar o seguinte sem problemas

mygrep -i -E "WARN|java" |less

Parece que a implementação correta deve ser algo como o seguinte.

function mygrep () {
    args=$*
    grep "$args" /path/to/logs/my.log
}

No entanto, quando eu uso isso com os parâmetros search e pipe acima, o grep retorna um erro opção inválida .

O que estou perdendo?

Agradecemos antecipadamente pela sua paciência!

    
por Kirk Anderson 20.10.2015 / 18:55

1 resposta

11

O código a seguir tem $args citado:

grep "$args" /path/to/logs/my.log

Isso pede para passar todo o valor dessa variável como um único parâmetro para grep. Assim, se você chamar mygrep com os parâmetros -i e -E , grep receberá, de fato, um único parâmetro -i -E , que é de fato inválido.

Os seguintes itens devem ser feitos:

function mygrep () {
    grep "$@" /path/to/logs/my.log
}

Escrever "$@" faz a coisa certa: é semelhante a $* , exceto que Ele expande adequadamente cada parâmetro para uma única palavra.

    
por 20.10.2015 / 19:08