【发布时间】:2019-11-14 13:55:26
【问题描述】:
我有几个 apache 访问文件,我想在分析它们之前先清理一下。我正在尝试通过以下方式使用 grep:
grep -v term_to_grep apache_access_log
我有几个要 grep 的术语,所以我将每个 grep 操作都管道化如下:
grep -v term_to_grep_1 apache_access_log | grep -v term_to_grep_2 | grep -v term_to_grep_3 | grep -v term_to_grep_n > apache_access_log_cleaned
直到这里,我的基本脚本按预期工作!但是我有很多 apache 访问日志,我不想对每个文件都这样做。我已经开始编写一个 bash 脚本,但到目前为止我无法让它工作。这是我的尝试:
for logs in ./access_logs/*;
do
cat $logs | grep -v term_to_grep | grep -v term_to_grep_2 | grep -v term_to_grep_3 | grep -v term_to_grep_n > $logs_clean
done;
谁能指出我做错了什么?
【问题讨论】:
-
错误信息是什么?您应该引用您的
$log变量。您可以使用grep 'foo\|bar'或egrep foo|bar进行交替。 -
我引用了 '$log',现在我得到: cat: '$log': 没有这样的文件或目录。我的脚本在 /access_logs 文件夹之外
-
嗯,我的意思是你应该这样引用:
"$logs". -
引用错误!如果想让 Bash 扩展引号内的变量,则需要使用双引号;单引号禁止任何扩展。
-
什么不起作用?