是否可以更改全局顺序?


12

我正在尝试通过执行以下操作来按时间顺序显示syslog中特定消息的所有实例:

grep squiggle /var/log/messages*

不幸的是,全局模式首先匹配当前活动的文件。例如。

/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312

这意味着最近的消息会先显示,然后是按时间顺序的历史消息。

是否可以通过某种方式调整全局模式行为,以使空匹配项(即just messages)显示在列表的末尾?

如果没有,什么是解决此问题的好方法?


2
您可以使用tac以下命令来反转输出:grep squiggle /var/log/messages* | tac...
pbm 2012年

Answers:


8

我不知道更改全局顺序的方法,但是您的情况有一个简单的解决方法:

grep squiggle /var/log/messages-* /var/log/messages

也就是说messages,与您的glob模式中的文件不匹配,并将其添加到grep的参数列表的末尾。


感谢那。使问题变得比原来复杂的多!
Burhan Ali

1
或者,为了提高想象力和减少冗余,请使用grep squiggle /var/log/messages{-*,}。(如果您想在Google上进行搜索,则称为“ bash brace expand”。)
通配符

11

在zsh中,您可以使用以下命令控制匹配的顺序(除其他外) glob限定符

echo /var/log/messages*        # usual lexicographic order
echo /var/log/messages*(On)    # reverse lexicographic order
echo /var/log/messages*(om)    # reverse chronological order (ascending mtime)
echo /var/log/messages*(Om)    # chronological order order (descending mtime)

(有关更多可能性,请参见手册。)您甚至可以通过使用oe或提供最新版本的比较功能来定义自己的排序顺序o+

在这里,文件的正确顺序是时间顺序。您可以根据名称轻松模拟它,即使在bash中也可以使用:

grep squiggle /var/log/messages{-*,}

我对zsh的了解越多,对它的印象就越深。
Burhan Ali 2012年

我可以从zsh(按顺序)获取文件并将它们传递回bash吗?
Wowfunhappy

@Wowfunhappy是的,但是您需要小心对待正确的特殊字符。问一个新问题。
吉尔(Gilles)'所以

2

您可以将反引号与ls -tr结合使用(按mod时间和反向排序),如下所示:

grep squiggle `ls -tr /var/log/messages*`
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.