使用常用日志简化 grep 的函数

Kir*_*son 6 grep pipe function cat

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

我想在管道中使用扩展的正则表达式并重定向输出等。

但是我在使用函数中的标准grep 模式文件语法时遇到了麻烦。

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

alias mygrep='cat /path/to/logs/my.log | grep'
Run Code Online (Sandbox Code Playgroud)

这使我可以毫无困难地运行以下内容

mygrep -i -E "WARN|java" |less
Run Code Online (Sandbox Code Playgroud)

似乎正确的实现应该类似于以下内容。

function mygrep () {
    args=$*
    grep "$args" /path/to/logs/my.log
}
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

dha*_*hag 11

$args引用了以下代码:

grep "$args" /path/to/logs/my.log
Run Code Online (Sandbox Code Playgroud)

这要求将该变量的整个值作为单个参数传递给 grep。因此,如果调用mygrep带有参数-i-Egrep实际上将接受一个单一的参数-i -E,这确实是无效的。

以下应该这样做:

function mygrep () {
    grep "$@" /path/to/logs/my.log
}
Run Code Online (Sandbox Code Playgroud)

书写"$@"是正确的:它类似于$*,不同之处在于它正确地将每个参数扩展为一个单词。