cat grep 多文件查看检索的问题

2023-01-10 11:17:34 +08:00
 acbot

需求是查看或是查找目录下所有文件名包含特定字符的文件内容,比如:查看或者是查找 /var/log/ 目录下的所有 messages 开头的系统日志文件,在 centos 7 上执行 cat /var/log/messages* 或 grep 'test' /var/log/messages* 命令只检索 /var/log/messages-20000000 这样的文件却不检索 /var/log/messages 这个文件,是什么原因呢,我记得这个命令在其他系统上执行都是正常的,另外为了排除星号非空问题 我把文件名写成短一点的 /var/log/mess* 结果还是一样。

1574 次点击
所在节点    Linux
15 条回复
julyclyde
2023-01-10 12:43:18 +08:00
你那文件是压缩的吧?
acbot
2023-01-10 12:51:36 +08:00
@julyclyde 不是,cat /var/log/messages 不带星可以查看这个文件
rrfeng
2023-01-10 13:12:22 +08:00
因为 /var/log/messages 里没有你要找的内容呗
killva4624
2023-01-10 13:19:10 +08:00
我觉得 3L 正解...
acbot
2023-01-10 13:24:52 +08:00
@rrfeng
@killva4624
/var/log/messages 和 /var/log/messages-20000000 这样的文件都有要检索的内容,grep 'test' /var/log/messages 路径后面不带星都可以找到内容。
alexsz
2023-01-10 13:30:49 +08:00
这样呢,find /var/log -name "messages*" -type f|xargs grep 'test'
v2wtf
2023-01-10 13:37:59 +08:00
grep -nir /var/log
stein42
2023-01-10 13:40:11 +08:00
执行下这些命令看看问题出在哪一步
ls /var/log/messages*
ls -hl /var/log/messages*
grep 'test' /var/log/messages
grep 'test' /var/log/messages /var/log/messages-20000000
grep 'test' /var/log/messages*

最好贴上你执行的命令和结果。
momocraft
2023-01-10 13:44:19 +08:00
贴一下你用的 shell ,和 set -o 命令的输出
acbot
2023-01-10 13:49:43 +08:00
@alexsz 这样可以曲折实现,但是我记得 cat grep 是支持通配符的啊,为什么不行找不到原因
acbot
2023-01-10 13:50:29 +08:00
@momocraft 第 1 条附言里面
acbot
2023-01-10 13:54:19 +08:00
@stein42 第 1 条附言里面
acbot
2023-01-10 13:58:33 +08:00
@stein42
@alexsz
@v2wtf
问题找到了,是排序问题!
killva4624
2023-01-10 15:07:32 +08:00
@acbot 排序问题是指?
acbot
2023-01-10 19:04:28 +08:00
@killva4624 cat 或 grep /var/log/messages* 那么有可能 /var/log/messages2 在前,也有可能 /var/log/messages1 那么内容打印的时候顺序就不一定,就出现了问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX