我试图通过执行以下操作,按时间顺序显示来自系统日志的特定消息的所有实例:
grep squiggle /var/log/messages*
Run Code Online (Sandbox Code Playgroud)
不幸的是,glob 模式首先匹配当前活动的文件。例如。
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
Run Code Online (Sandbox Code Playgroud)
这意味着最近的消息首先显示,然后按时间顺序显示历史消息。
是否可以以某种方式调整 glob 模式行为以使空匹配(即 just messages
)显示在列表的末尾?
如果没有,解决这个问题的好方法是什么?
我编写了一个 bash 脚本来处理文件名列表(使用 glob 扩展,如for f in *
),然后将该列表的一个子集输出到文件中。随后,我将这个文件的内容读入一个数组,并使用明显的<
和>
运算符来比较字符串,对特定文件名执行简单的二进制搜索。
考虑到我希望脚本能够在 Linux、MacOS、MinGW 等许多不同的环境中工作……(即使它使用诸如[[
和stat
不太便携的东西),我的问题是:
sort
或额外的 bash 代码)或者 glob 扩展是否总是排序 - 在每个环境中?条件运算符是否使用与扩展(或之后sort
)相同的“排序” ?
扩展或sort
返回file10.txt
之后file2.txt
(在什么情况下?)但使用条件运算符file10.txt
会在之前file2.txt
?我sort
会用什么选项来解决这个问题?
如果我的某些文件名是 Unicode,有什么注意事项吗?
LC_COLLATE
影响上述任何一项? 我显然需要文件内容来匹配运算符的排序“方法”,以便二分搜索按预期工作......