[当我使用bash版本4时,我使用以下命令对所有别名和字符串的声明函数进行grep表示:
alig() {
alias | grep $1
declare -f | sed -n '/^[a-z0-9A-Z.-]\+ () *$/ , /^}$/{ //{/()/h;/()/!H;};//!H;/^}$/!d;g;s/\n[ \o11]*/ /g;s/}$//;p; }' | grep $1
}
alig
命令过去通常是这样的:
# alig grep
alig() {
alias | grep $1
declare -f | sed -n '/^[a-z0-9A-Z.-]\+ () *$/ , /^}$/{ //{/()/h;/()/!H;};//!H;/^}$/!d;g;s/\n[ \o11]*/ /g;s/}$//;p; }' | grep $1
}
alias hg='history | grep'
gcm() {
git commit -m "$@"
git --no-pager log -1 | grep ^commit
}
它将返回包含字符串'grep'的任何别名或函数的完整内容。
自升级到bash版本5后,sed
命令导致一个空字符串。我知道我可以使用declare -f <function>
来查看函数,但是我希望能够对所有别名和函数进行grep输入字符串,因为有时(很多时候)我不知道我在寻找什么,所以我只想更新sed
查询以使其正常工作。
原来不是bash v5,它正在升级到macOS Catalina,从而覆盖了我的GNU设置。 GNU sed可以很好地执行sed
查询。