我正在尝试创建一个函数来简化我必须定期使用的日志的 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
使用参数-i
and 进行调用-E
,grep
实际上会收到单个参数-i -E
,这确实是无效的。
应该执行以下操作:
function mygrep () {
grep "$@" /path/to/logs/my.log
}
写入"$@"
做了正确的事情:它类似于$*
,不同之处在于它正确地将每个参数扩展为单个单词。