如何编写Bash函数实现根据参数数量生成链式grep命令
实现
ignore Bash过滤函数 下面是符合需求的ignore函数实现,兼顾易用性和安全性(避免eval带来的风险):
ignore() { # 无参数时直接回显输入内容 if [ $# -eq 0 ]; then cat return fi # 第一个过滤规则处理标准输入 grep -iv -- "$1" shift # 依次追加后续过滤规则,自动形成管道链 for pattern in "$@"; do grep -iv -- "$pattern" done }
功能说明
- 接收任意数量的参数,每个参数作为一个过滤关键词
- 单个参数时,仅执行
grep -iv 参数过滤输入内容 - 多个参数时,自动生成
grep -iv 参数1 | grep -iv 参数2 | ...的链式过滤效果 - 使用
--标记参数结束,避免关键词以-开头时被当作命令选项解析 - 无参数时原样返回输入内容,避免误过滤
使用示例
apt-cache search apache2 | ignore doc lib
这条命令会从apt-cache search apache2的结果中,过滤掉包含doc或lib的行。
内容的提问来源于stack exchange,提问作者Michal D.
相关产品推荐
相关产品推荐

