每个程序员都应该知道的8个Linux命令

发表于:2012-9-17 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:aqee    来源:51Testing软件测试网采编

  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, Kindle edition, 39.99  
  3. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition,

  假设退款订单113出了一些问题,你希望查看所有相关订单——你又需要使用grep了。

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

  你会发现在grep上的匹配模式除了“113”外还有一些其它的东西。这是因为113还可以匹配上书目或价格,加上额外的字符后,我们可以精确的搜索到我们想要的东西。

  现在我们已经知道了退货的详细信息,我们还想知道日销售和退款总额。但我们只关心《Patterns of Enterprise Architecture》这本书的信息,而且只关心数量和价格。我现在要做到是切除我们不关心的任何信息。

  cut

  cut – 删除文件中字符行上的某些区域

  又要使用grep,我们用grep过滤出我们想要的行。有了我们想要的行信息,我们就可以把它们切成小段,删除不需要的部分数据。

  1. jfields$ cat order.* | sort | grep Patterns  
  2. 8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99  
  3. 8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99  
  4.  
  5. jfields$ cat order.* | sort | grep Patterns | cut -d"," -f2,5  
  6.  1, 39.99  
  7.  -1, 39.99

  现在,我们把数据缩减为我们计算想要的形式,把这些数据粘贴到Excel里立刻就能得到结果了。

  cut是用来消减信息、简化任务的,但对于输出内容,我们通常会有更复杂的形式。假设我们还需要知道订单的ID,这样可以用来关联相关的其他信息。我们用cut可以获得ID信息,但我们希望把ID放到行的最后,用单引号包上。

  sed

  sed – 一个流编辑器。它是用来在输入流上执行基本的文本变换。

  下面的例子展示了如何用sed命令变换我们的文件行,之后我们在再用cut移除无用的信息。

  1. jfields$ cat order.* | sort | grep Patterns \  
  2. >| sed s/"[0-9\:]* \([0-9]*\)\, \(.*\)"/"\2, '\1'"/  
  3. 1, Patterns of Enterprise Architecture, Kindle edition, 39.99, '111'  
  4. -1, Patterns of Enterprise Architecture, Kindle edition, 39.99, '113'  
  5.  
  6. lmp-jfields01:~ jfields$ cat order.* | sort | grep Patterns \  
  7. >| sed s/"[0-9\:]* \([0-9]*\)\, \(.*\)"/"\2, '\1'"/ | cut -d"," -f1,4,5  
  8. 1, 39.99, '111'  
  9. -1, 39.99, '113'

  我们对例子中使用的正则表达式多说几句,不过也没有什么复杂的。正则表达式做了下面几种事情

  ● 删除时间戳

  ● 捕捉订单号

  ● 删除订单号后的逗号和空格

  ● 捕捉余下的行信息

  里面的引号和反斜杠有点乱,但使用命令行时必须要用到这些。

  一旦捕捉到了我们想要的数据,我们可以使用 \1 & \2 来存储它们,并把它们输出成我们想要的格式。我们还在其中加入了要求的单引号,为了保持格式统一,我们还加入了逗号。最后,用cut命令把不必要的数据删除。

  现在我们有麻烦了。我们上面已经演示了如何把log文件消减成更简洁的订单形式,但我们的财务部门需要知道订单里一共有哪些书。

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号