如何使用正则表达式省略LinuxIA64的df -k命令中的标题

时间:2011-06-27 09:19:33

标签: regex

我有以下输出

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             60300484  18883824  38304156  34% /
/dev/sda1              1046516      8604   1037912   1% /boot/efi
tmpfs                  4120800         0   4120800   0% /dev/shm
psnfs1:/SDepot     629145600 400663744 228481856  64% /depot
psnfs1:/vol/ghome/ghome/support/kumar
                     1287651328 1065510400 222140928  83% /home/kumar
psnfs2:/vol/us_nhome2/us_nishome2/shaw
                     1073741888 799816192 273925696  75% /home/shaw
psnfs2:/vol/us_nhome2/us_nishome2/asimon
                     1073741888 799816192 273925696  75% /home/asimon

我使用(?xms)(^[/\w:]+.*?)(?=^[/\w:]+|\Z)来获取每一行,之后我使用\s从prev regex输出中提取每个列值,但问题是我也得到了标题(Filesystem 1K-blocks Used Available Use% Mounted on) 。我怎么能省略它们?也请解释正则表达式:)谢谢

1 个答案:

答案 0 :(得分:1)

如果你把它构建成一个shell管道,使用tail(1)可能比构建一个更复杂的正则表达式更容易:

$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             11811504   7979960   3231544  72% /
none                   3054508       300   3054208   1% /dev
...

VS

$ df -k | tail -n+2
/dev/sda3             11811504   7979960   3231544  72% /
none                   3054508       300   3054208   1% /dev
none                   3061428       596   3060832   1% /dev/shm
...

来自tail(1)联机帮助页:

   -n, --lines=K
          output the last K lines, instead of the last 10; or
          use -n +K to output lines starting with the Kth

如果是我,我可能会使用awk(1)来获取特定列:

$ df -k |tail -n+2 | awk '{print $5, $6;}'
72% /
1% /dev
1% /dev/shm
1% /var/run
0% /var/lock
72% /var/lib/ureadahead/debugfs
59% /boot
34% /home