Como posso usar o grep para procurar linhas que começam com um certo caractere no bash

2

Eu quero um alias ('ggg') que procure no meu conjunto existente de aliases e diga-me todos os que começam com g. Eu tenho muitos g * aliases:)

Eu tentei isso: alias ggg='alias | grep ^g' mas não me deu nenhuma saída (ou erro). A coisa que eu tenho mais certeza é o caractere de 'início da linha'.

    
por Michael Durrant 24.11.2012 / 15:38

3 respostas

3

A saída do alias são linhas que começam com alias . Então, seu alias deve ser:

alias ggg='alias | grep "^alias g"'
    
por 24.11.2012 / 15:40
4

Em zsh,

alias ggg='alias -m "g*"'

Ou use uma função, para que ggg não seja impresso:

ggg() alias -m 'g*'

Você também pode grep a saída de "alias", mas pode não funcionar corretamente se houver alguns aliases de várias linhas.

Com o bash, você pode usar esse truque:

(
   alias() { [[ $1 = g* ]] && builtin alias "${1%%=*}"; }
   eval "$(builtin alias)"
)

A ideia é que alias do bash produz algum texto que está pronto para ser interpretado para reproduzir os mesmos aliases, algo como:

$ alias
alias a='foo'
alias goo='gar
baz
alias gro=grar'

Portanto, nós o avaliamos, mas depois de ter redefinido alias como uma função que chama o alias real somente quando passamos uma string que começa com "g".

    
por 24.11.2012 / 18:04
2

Depende do seu shell, se você estiver usando o bash, @Dennis está completamente certo, pois zsh pode ser outro problema se você ativou EXTENDED_GLOB . Nesse caso, o ^ é interpretado pelo shell e você tem para citá-lo, ou seja:

alias ggg='alias | grep "^g"'
    
por 24.11.2012 / 15:50