【发布时间】:2020-08-18 14:24:29
【问题描述】:
举个例子,我有一堆应用程序不断地写入 /var/log/app//nonsence.file 没有其他文件夹,只是来自这一组应用程序的日志。所以我可以轻松做到:
cat /var/log/app/*/nonsence.file 我会得到一个很好的应用日志流。
在此流中混入定期对人的引用。我想构建一个脚本以在某些名称出现在流中时触发。
我可以很容易地做到这一点:
cat /var/log/app/*/nonsence.file | grep '格雷格|约翰|苏西|斯泰西' 这样我就可以将其放入一个简单的脚本中:
#!/bin/sh
NAME=`cat /var/log/app/*/nonsence.file | grep 'greg\|john\|suzy\|stacy'`
case "$NAME" in
"greg" ) echo "I found greg!" >> ~/names.meh ;;
"john" ) echo "I found john!" >> ~/names.meh ;;
"suzy" ) echo "I found suzy!" >> ~/names.meh ;;
"stacy" ) echo "I found stacy!" >> ~/names.meh ;;
* ) echo "forever alone..." >> ~/names.meh ;;
esac
简单易懂!
麻烦的是,名字列表时常变化,我真的想要一个更整洁的列表。
经过一番思考,我相信我真正想做的只是将每个名称添加到案例部分。那么我需要在 NAME 变量部分做什么来告诉命令 grep 案例部分中引用的名称?
【问题讨论】:
-
那么...
grep -o?还有grep -f?你读过grep手册吗?而您的case缺少;;。 -
是的,那里的脚本只是一个示例。我知道我错过了;;我发布的那一刻,但懒得编辑。
-
至于 grep 手册,是的,我读过它,这就是为什么我知道我可以 grep 两个位置,但正如我所问的,这是最好的方法吗?我的意思是,每次有新名称时我都必须更新脚本,我想我真正的问题是,我如何告诉 NAME 变量 grep 每个案例条目的触发器是什么?
-
你知道吗...无论如何这是一个更好的方法...我想我需要编辑我的问题。
-
如何
cat * | grep -wof name.list | sort -u并将您想要找到的所有名称存储在name.list中?