单列rpm命令输出

时间:2013-07-03 12:32:38

标签: ruby linux terminal

我有一个应用程序,我想获得几个包的RPM信息,并以令人愉悦和引人注目的方式格式化它。 * *吊杆

我的问题是rpm想要将数据格式化为两列,这很烦人。

命令

rpm -qi ruby

结果

Name        : ruby                         Relocations: (not relocatable)
Version     : 1.8.6.36                          Vendor: (none)
Release     : 2                             Build Date: Thu 18 Sep 2008 10:50:30 AM EDT
Install Date: Thu 25 Sep 2008 12:12:53 PM EDT      Build Host: kickbench
Group       : Development/Languages         Source RPM: ruby-1.8.6.36-2.src.rpm
Size        : 1664035                          License: Ruby License/GPL - see COPYING
Signature   : (none)
URL         : http://www.ruby-lang.org/
Summary     : An interpreter of object-oriented scripting language.
Description : [truncated]

我想要什么

Name        : ruby
Relocations : (not relocatable)
Version     : 1.8.6.36
Vendor      : (none)
Release     : 2
Build Date  : Thu 18 Sep 2008 10:50:30 AM EDT
Install Date: Thu 25 Sep 2008 12:12:53 PM EDT
Build Host  : kickbench
Group       : Development/Languages
Source RPM  : ruby-1.8.6.36-2.src.rpm
Size        : 1664035
License     : Ruby License/GPL - see COPYING
Signature   : (none)
URL         : http://www.ruby-lang.org/
Summary     : An interpreter of object-oriented scripting language.
Description : [truncated]

有没有办法在不手动指定实际长--queryformat

的情况下获得此格式

或者,任何以Ruby为原生的方法都可以。

1 个答案:

答案 0 :(得分:0)

pairs = %x{rpm -qi ruby}
       .split(/(?<!:)\s{2,}(?![\s:])|#$//)
       .map{|line| line.split(/\s*:\s+/, 2)}
width = pairs.map{|pair| pair.first.length}.max
pairs.each{|k, v| puts "#{k.ljust(width)}: #{v}"}