我想使用 awk 快捷方式作为函数,这样我就可以传递列号,然后打印输出。我的别名是:
alias A="| awk '{print \$1}'
alias G="| grep -i'
代替打字:
ps -ef | grep mysql | awk 'print $2'
我希望能够输入以下内容:
ps -ef G mysql A 2
有什么建议么?
答案1
我认为这是不可能的。基本上,别名不能接受参数 ( $1
),函数不能进行宏扩展 ( |
)。
我能想到的最接近的选择:
在bash
或zsh
C() { col=$1; shift; eval "awkcmd='{ print \$$col }'"; echo "$awkcmd"; "$@" | awk "$awkcmd"; }
C 2 ps -ef G mysql
在zsh
alias -g F="| tr -s '[[:space:]]' | cut -d ' ' -f"
ps -ef G mysql F 2
答案2
将管道放入别名中很尴尬。相反,创建一个可以通过管道将内容传递到的 shell 函数:
G () {
grep -i "$@"
}
A () {
awk -v col="$1" '{ print $col }'
}
然后,
ps -ef | G mysql | A 2
但在 Linux 系统上,这个特定的管道或多或少与
pgrep mysql