Opção de cor padrão Grep

11

grep é um dos comandos mais usados ​​no linux. Parece-me que seu recurso básico é destacar a string que você procurou nas linhas de saída. isso pode ser alcançado pela opção --color.

Digitar --color sempre é chato e também não é produtivo. Existe alguma maneira de mudar o grep para se comportar como grep --color.

Tentei escrever um pequeno script chamado grepd e adicionei isso à minha variável PATH. Mas o script não funciona na entrada grepd . Alguma sugestão, por favor.

#!/bin/bash
grep --color $1 $2
Srujan Kumar Gulla
fonte

Respostas:

21

Simplesmente adicione o seguinte alias ao arquivo de configuração do seu shell, por exemplo, .bashrcou .bash_profile(dependendo do que você usa, veja aqui ):

alias grep='grep --color=auto'

Você pode simplesmente usá-lo como grep.

Geralmente, não há necessidade de criar scripts quando aliases simples de comando fazem a mesma coisa. Na verdade, seu script nem funcionaria se você quisesse passar mais opções grep. Caso você precise de um pequeno trecho que possa lidar com argumentos, use funções .

slhck
fonte
9
Ou equivalente, defina a GREP_OPTIONSvariável de ambiente:export GREP_OPTIONS='--color=always'
Jérôme
Isso não adiciona a opção de cor se você usar fgrep ou egrep, precisará de aliases separados para eles. Além disso, @ Jérôme: GREP_OPTIONS está marcado como obsoleto na página do manual grep.
Thayne 23/01
@Thayne apenas para GNU grep e não para outros como FreeBSD grep. E até onde eu sei, faz 4 anos que isso mudou e ainda é suportado. Preterido não significa removido.
cde
É o que eu costumo fazer, no entanto, em alguns casos, não funciona direito. Por exemplo: some_command | xargs grep foonão será colorido porque xargs não usa o alias.
TM.
2
#!/bin/sh
exec grep --color "$@"

Isso ilustra a maneira padrão de "agrupar" um comando com um script de shell, quando o comando não funciona da maneira que você gosta.

Os execevita a criação de um processo adicional (um para o script e um para grep). Você pode deixar de fora se quiser.

O "$@"é substituído por todos os argumentos do script, não importa quantos existam. Ele preserva corretamente os argumentos com espaços e outros caracteres que são especiais para o shell.

Kenster
fonte
O "exec grep" deve ser "exec / bin / grep"
Berend de Boer
2
@BerenddeBoer Na verdade não. "exec grep" funcionaria bem. Não há nada de errado em pesquisar o caminho para grep.
Kenster
-1

tente colocar export GREP_COLORS='AUTO'seu ~ / .bashrc - para mim funciona.

de man grep

       --color[=WHEN], --colour[=WHEN]
          Surround  the  matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields and groups of context lines) with escape sequences
          to display them in color on the terminal.  The colors are defined by the environment variable GREP_COLORS.  The deprecated environment variable GREP_COLOR is still supported, but  its  setting
          does not have priority.  WHEN is never, always, or auto.
mroz
fonte
5
GREP_COLORSé o conjunto das cores reais. A configuração para AUTOnão deve mostrar cores. exportar GREP_OPTIONS = '- color = auto' deve ser a resposta.
precisa saber é o seguinte