grep 不在列表的 for 循环中工作

Hus*_*oli 6 grep shell-script tail cat

我有一些日志文件。我有一个用户 ID 列表。我的日志文件采用特定格式

log-yyyy-mm-dd
e.g. log-2014-09-30
Run Code Online (Sandbox Code Playgroud)

我正在尝试在日志文件中搜索每个用户 ID。这就是我正在做的 -

for userid in 234, 283, 893, 982, 323; do cat log-2014-09-30 | grep -a "user deleted "$userid  | tail -1; done
Run Code Online (Sandbox Code Playgroud)

理想情况下,它应该搜索文件中的每个用户 ID 并打印最后一个匹配项。然后我将搜索log-2014-09-29剩余的用户 ID 等等。

但它只打印最后一个用户 ID 的匹配项。

INFO - 2014-09-30 22:49:00 - user deleted 323
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?请帮帮我。

PM *_*ing 7

去掉 userid 列表中的逗号。将列表传递给 for 循环的方法是给它空格分隔的值,而不是逗号分隔:

for userid in 234, 283, 893, 982, 323; do echo "$userid";done
Run Code Online (Sandbox Code Playgroud)

印刷

234,
283,
893,
982,
323
Run Code Online (Sandbox Code Playgroud)

for userid in 234 283 893 982 323; do echo "$userid";done
Run Code Online (Sandbox Code Playgroud)

印刷

234
283
893
982
323
Run Code Online (Sandbox Code Playgroud)

所以,你应该做

for userid in 234 283 893 982 323; do 
    grep -a "user deleted $userid" log-2014-09-30  | tail -n 1
done
Run Code Online (Sandbox Code Playgroud)