如何使用 grep 搜索 bash 中以某个字符开头的行

如何使用 grep 搜索 bash 中以某个字符开头的行

我想要一个别名(“ggg”),它将查看我现有的一组别名并告诉我所有别名首先G。我有很多 g* 别名:)

我尝试了这个:alias ggg='alias | grep ^g'但没有给我任何输出(或错误)。我最不确定的是“行首”字符。

答案1

在 zsh 中,

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

或者使用一个函数,这样ggg就不会打印自身:

ggg() alias -m 'g*'

您还可以 grep “alias”的输出,但如果存在一些多行别名,它可能无法正常工作。

对于 bash,你可以使用这个技巧:

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

这个想法是 bashalias输出一些文本,这些文本可以被解释以重现相同的别名,例如:

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

因此,我们确实对其进行了评估,但在重新定义为仅在传递以“g”开头的字符串时才alias调用实数的函数之后。alias

答案2

alias 的输出是以 开头的行alias。所以你的别名应该是:

alias ggg='alias | grep "^alias g"'

答案3

这取决于你的 shell,如果你使用 bash @Dennis 是完全正确的,因为zsh如果你启用了,这可能是另一个问题,EXTENDED_GLOB在这种情况下^shell 会解释它,你必须引用它,即:

alias ggg='alias | grep "^g"'

相关内容