Aliasing piping operations in bash

1

Eu freqüentemente faço algo como grep -R foo . na raiz de um projeto. É útil, mas os resultados são diluídos pela inclusão do binário. temp e arquivos de teste com os quais não me importo. Então acabo fixando 2>&1 | grep -vE “Binary|/tmp/|/test/“ , que filtra as coisas que eu não me importo. O problema é que é uma dor para digitar cada vez. Tudo incluindo e depois do 2 > & 1 permanece o mesmo da consulta à consulta. Então eu quero colocá-lo em um alias de tipos que me deixariam grep -R foo . <thingie> , onde coisa é algo relativamente curto. Eu tentei aliases e variáveis de ambiente, mas os aliases só funcionam se eles são a primeira palavra na linha, e vars de ambiente eu posso expandir com ${thingie} , mas a tubulação parece se estragar no processo. Alguma idéia de como fazer isso funcionar?

    
por Chris 16.06.2015 / 16:24

1 resposta

2

Sim, uma função é o caminho a percorrer. Se você tem o grep do GNU

  1. use a opção --exclude-dir para que a pesquisa recursiva nem se importe com isso.
  2. use a opção --binary-files=without-match para ignorar arquivos binários (alias -I ).

Então:

mygrep() {
    grep -R --exclude-dir=tmp --exclude-dir=test -I "$@" .
}

Ligue para

mygrep Foo
mygrep -i foo
mygrep -E '(foo|bar)baz'
    
por 16.06.2015 / 17:19