用Java解析Unix命令输出
我正在Unix中执行用Java解析Unix命令输出,java,unix,solaris,Java,Unix,Solaris,我正在Unix中执行finger-m命令。它返回如下输出 Login Name TTY Idle When Where Sam Sam D S pts/2 Sun 13:25 10.xxx.xxx.xx Peter Peter M Thomas pts/1 58 Sun 12:25 10.xxx.xxx.xx 如何在Java程序
finger-m
命令。它返回如下输出
Login Name TTY Idle When Where
Sam Sam D S pts/2 Sun 13:25 10.xxx.xxx.xx
Peter Peter M Thomas pts/1 58 Sun 12:25 10.xxx.xxx.xx
如何在Java程序中解析它
命令的输出中有空格和制表符,这两种组合。此外,生成的输出在空间和选项卡之间不是唯一的,因为在登录名和名称之间,它返回的是空间,但在其他选项卡之间是唯一的
是否有一种方法可以显示“仅结果”选项卡的输出,以便忽略空间和进程。您考虑过使用正则表达式吗?您所说的“解析”是什么意思?你能给出一个你想要的Java数据结构的例子吗?还有,我不明白这句话:“有没有一种方法可以显示只显示结果的输出选项卡,这样我们就可以忽略空间和过程。”你真的想要的只是重新设置输出的样式吗,没有真正解析它?您是否考虑过从utmpx文件中读取原始数据,而不是试图解析供人读取而不是供程序解析的输出?我的数据结构看起来像LoginId、Name、LoggedInFrom、LoggedDate等。命令输出是字符串的形式,我正在读取该字符串。我想把Sam分配给LoginId。Sam D S登录名和LoggedInFrom至10.xx.xxx.xx。我该怎么做?有更简单的方法吗?步骤1:规范化数据。在我的测试中,
finger
不返回任何'\t',输出只包含空格,但是如果您看到选项卡,请使用正确的选项卡大小值通过管道将输出扩展到。步骤2:使用从行开始的绝对偏移量解析规范化数据,以找到所需的列。这不是很可靠,但应该有效。我会读/var/adm/utmpx
,就像@alanc建议的那样。