como fazer alias para tornar o comando grep mais curto [duplicado]

7

Na minha codificação, sempre faço grep -rnIi "abcabc" . --color

Mas, como criar um alias que me permita digitar apenas uma palavra com minha string de pesquisa? Isso é possível?

    
por BufBills 04.03.2014 / 02:28

2 respostas

11

Preste atenção nas tags dessa pergunta. Esta resposta é a correta, dado que a versão de grep incluída no CentOS 6 está abaixo da versão 2.11

Eu não acredito que você possa fazer isso usando apenas um alias (pelo menos não na forma que você escreveu - veja @ resposta de Graeme para uma sintaxe alternativa).

NOTA: Eu também mencionarei aqui que a solução da Graeme, embora correta, não funciona no CentOS 5 & 6. Confirmei isso e, de fato, parece ser um problema com a versão de grep (2,11 ou mais) que acompanha essas distros. O problema parece estar com grep não, por padrão, pesquisando STDIN quando nenhum argumento de caminho é fornecido com a opção -r . Executar grep -rnIi --color "string" apenas trava indefinidamente, tentando pesquisar STDIN.

Os aliases não podem receber argumentos sendo passados para eles. Eles são mais sinônimos de uma macro onde podem ser expandidos pelo shell para outra coisa.

$ alias l='ls -l'

Isso pode ser usado assim:

$ ll
-or-
$ ll somedir

Mas somedir não é passado para ll , em vez disso, ll é expandido para ls -l e, em seguida, substitui ll em seu comando.

Voltar para sua pergunta

Então você pode usar uma função no shell. Funções podem levar argumentos.

$ function mygrep { grep -rnIi "$1" . --color; }

Você então usa assim:

$ mygrep "blah"

    
por 04.03.2014 / 02:44
7

Isso pode realmente ser um alias. O --color não precisa estar no final e grep sempre procura o diretório atual com -r se nenhuma opção de diretório for fornecida (pelo menos o GNU grep ). Portanto, você pode fazer:

alias mygrep='grep -rnIi --color'

Atualizar

O comportamento de pesquisar o diretório atual por padrão foi introduzido em GNU grep 2.11 . Do registro de alterações :

If no file operand is given, and a command-line -r or equivalent option is given, grep now searches the working directory. Formerly grep ignored the -r and searched standard input nonrecursively. An -r found in GREP_OPTIONS does not have this new effect.

Portanto, nas versões >=2.11 de GNU grep , o uso do alias seria o seguinte:

mygrep PATTERN [PATH...]

Para versões de grep antes disso, você teria que especificar o caminho toda vez que @sl's answer usar uma função é o melhor caminho. Embora você possa obter o mesmo uso acima, escrevendo a função assim:

mygrep () { grep -rnIi --color "$1" "${2:-.}"; }

Assumindo, é claro, que não há exigência de que o --color esteja no final como no Q ...

    
por 04.03.2014 / 03:04