使用常用日志简化 grep 的功能

使用常用日志简化 grep 的功能

我正在尝试创建一个函数来简化我必须定期使用的日志的 grep 操作。

我想将扩展的正则表达式与它的管道一起使用并重定向输出等。

但我在使用标准来做到这一点时遇到了困难grep 模式文件函数中的语法。

我现在设置的方式看起来很糟糕,但完成了工作:

alias mygrep='cat /path/to/logs/my.log | grep'

这使我可以毫无问题地运行以下命令

mygrep -i -E "WARN|java" |less

看起来正确的实现应该如下所示。

function mygrep () {
    args=$*
    grep "$args" /path/to/logs/my.log
}

但是,当我将其与上面的搜索和管道参数一起使用时,grep 返回一个无效选项错误。

我缺少什么?

答案1

引用了以下代码$args

grep "$args" /path/to/logs/my.log

这要求将该变量的整个值作为单个参数传递给 grep。因此,如果您mygrep使用参数-iand 进行调用-Egrep实际上会收到单个参数-i -E,这确实是无效的。

应该执行以下操作:

function mygrep () {
    grep "$@" /path/to/logs/my.log
}

写入"$@"做了正确的事情:它类似于$*,不同之处在于它正确地将每个参数扩展为单个单词。

相关内容