我有以下输出
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)
。我怎么能省略它们?也请解释正则表达式:)谢谢
答案 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