background image

6. 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99  
7. 8:24:19 113, -1, Patterns of Enterprise Architecture, K
indle edition, 39.99 

如果你想看这些 log 文件的内容,你可以把它们连接起来并输出到标准输出
上,就是上面的例子展示的。这很有用,但输出的内容可以更有逻辑些。

sort

sort

 – 文件里的文字按行排序

此时 sort 命令显然是你最佳的选择。

1. jfields$ cat order.* | sort  
2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Ki
ndle edition, 39.99  
3. 8:22:20 111, Order Complete  
4. 8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99  
5. 8:23:50 112, Order sent to fulfillment  
6. 8:24:19 113, -1, Patterns of Enterprise Architecture, K
indle edition, 39.99  
7. 8:24:20 113, Refund sent to processing 

就像上面例子显示的,文件里的数据已经经过排序。对于一些小文件,你可
以读取整个文件来处理它们,然而,真正的 log 文件通常有大量的内容,你
不能不考虑这个情况。此时你应该考虑过滤出某些内容,把 cat、sort 后的
内容通过

管道

传递给过滤工具。

grep

grep

, egrep, fgrep – 打印出匹配条件的文字行

假设我们只对 Patterns of Enterprise Architecture 这本书的订单感兴趣。使
用 grep,我们能限制只输出含有 Patterns 字符的订单。

1. jfields$ cat order.* | sort | grep Patterns  
2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Ki
ndle edition, 39.99  
3. 8:24:19 113, -1, Patterns of Enterprise Architecture, K
indle edition, 39.99 

假设退款订单 113

——

出了一些问题,你希望查看所有相关订单

你又需要使

用 grep 了。

1. jfields$ cat order.* | sort | grep ":\d\d 113, "  
2. 8:24:19 113, -1, Patterns of Enterprise Architecture, K
indle edition, 39.99  
3. 8:24:20 113, Refund sent to processing 

你会发现在 grep

上的匹配模式除了 113”外还有一些其它的东西。这是因为

113 还可以匹配上书目或价格,加上额外的字符后,我们可以精确的搜索到
我们想要的东西。
现在我们已经知道了退货的详细信息,我们还想知道日销售和退款总额。但
我们只关心《Patterns of Enterprise Architecture》这本书的信息,而且只
关心数量和价格。我现在要做到是切除我们不关心的任何信息。